bon, alors il en a été question plusieurs fois, et j'ai même mis des exemples de coté, donc je le lance ^_^
Je propose donc de regrouper dans ce topic un maximum d'exemples d'erreurs différentes, à partir de ce que renvoi le compilateur. Afin que les scripteurs débutants (
) et ceux qui adaptent les scriptent puissent avoir quelque éléments avant de se jeter à l'eau et d'ouvrir un fil
Le but n'est évidement pas de ne plus répondre aux questions hein ! Simplement de faciliter la vie à tous le monde
Bien sur il ne viendrait à personne de faire ces erreurs tout a fait stupides
mais dans l'euphorie, ba quand on a 6000 ligne à vérifier, c tjrs flippant lorsque ca marche pas et qu'on sait pas pourquoi
(on a svt la ligne de l'erreur, mais bon . . . )
D'une manière générale
*L'erreur qui empêche la compilation, si elle ne se trouve pas à la ligne indiquée (genre il n'y a qu'un bête } a cette ligne ) peut très bien se trouver à la ligne au dessus, c'est souvent le cas d'ailleurs
Quelqu'un à dis un jour :
Si on t'indique une erreur à la ligne X, pense, petit scarabé, à vérifier la ligne X-1
*Les majuscules sont très importantes, et très souvent source de pb de compilation
*En cas d'include, la ligne d'erreur prend en compte les lignes de l'include (euh, parfois, je suis pas tjrs sûre
) donc si aucune ligne n'est surlignez, et bien
-bien regarder le nom du script où l'erreur est détectée
- vérifier le script d'include
- sauter des lignes dans le script à compiler, à l'endroit ou le compilateur vous indique le soi-disant bug; si le bug vient effectivement de l'include, le compilateur vous indiquera alors qu'il y a une erreur ... dans une ligne vide
- regarder attentivement le nom du fichier .nss qui contient l'erreur, dans le rapport du compilateur; normalement vous devriez lire le nom du fichier d'include et non du script que vous essayez de compiler
-mettez un :
au début de votre include et éssayé de le compiler
*En cas de gros script ardu, mettez toutes vos déclarations de variables en début de script, du moins au début, l'optimisation ça seras pour après
Et n'hésitez pas à déclarer de nouvelles variables si vous avez un doute !! Si vous avez des problèmes, c'est pas à un ou deux tours d'horloge près . . .
*aerer correctement un script permet de débusquer les erreurs plus facilement, faites le tout de suite, ca éviteras de chercher à quel moment il manque des accolades
*dès que ca devient un peu gros, c'est idiot hein, mais il faut prendre l'habitude de fermer immediatement les parenthèses et les accolades, placer le nb de virgule pour les arguments des fonction etc. et rédiger entre, ainsi on évite bon nombre d'errur dans les
if(GetLocalInt(GetLocalObject(OBJECT_SELF, GetLocalString(oObj, "ENFIN")), "MAUVAISE ID"))
{
if()
{
while(GetIsValidMachin(mMachin))
{
for(i;i<10 ;i++)
ActionDoMachin();
//etc.
}
}
}
*Il est parfois necessaire de détacher de l'écran pour voir où sont les bourdes
Allez donc prendre une douche, dormez un peu, rasez/épilez vous, mangez un vrai repas, et rééssayez, votre écran vous remercras
(méthode éssayée, vérifiée, et approuvée )
Bon, alors quelques exemples
(peut être faudra t'il éditer ce post pour rassembler les messages au début, des fois qu'il y aurait des discutions pour certaines erreurs
)
Alors, pour commencer, présentation sommaire du format d'une erreur du compilateur d'aurora
07/05/2003 20:14:16 : Erreur. 'subo_inc' n’est pas compilé.
subo_inc.nss(328): ERREUR : VARIABLE DEFINED WITHOUT TYPE
date heure : Erreur. 'nom du script' n'est pas compilé.
nomdufchier.nss(ligne où se trouve l'erreur): ERREUR : TYPE D'ERREUR
Des exemple maintenant, avec des explications sommaires dans la mesure du possible
>>>===<<< >>>===<<<
une qui arrive au moyenne une dizaine de fois par (essai de) compilation
(oui je parle pour moi
)
ERREUR : VARIABLE DEFINED WITHOUT TYPE
on ne peu plus parlant, vous avez oublié de définir une variable
il faut quand on utilise une variable la déclarer, avec un object oTruc; int nMachin; etc.
Pour savoir ce qu'est une variable, ba allez voir les tutoriaux
>>>===<<< >>>===<<<
Une autre courante :
ERREUR : DECLARATION DOES NOT MATCH PARAMETERS
Alors, la le problème c'est qu'on a pas rentré les bons paramètres dans la fonction, autrement dit :
void SetLocalInt(object oObject, string sVarName, int nValue)
demande :
un objet
une string (des lettres quoi)
un entier
si a la place de l'entier par exemple on met
1.5
ca n'iras pas, parce que c'est une "float", un decimalien
rappel, une string se met entre guilement, sinon c'est une variable qu'il a fallu définir avant, genre
string sMachin = "blablabl balablab";
object oMachin = GetTonObjectCommeTuVeu();
SetLocalString(oMachin , "NOM_DE_TA_VARIABLE", sMachin );
>>>===<<< >>>===<<<
encore une :
ERREUR : UNDEFINED IDENTIFIER (oSpeak2)
evidement, zaurez pas tjrs "oSpeak2"
voici le bout de code :
if(GetLocalString(oSpeak2 "TEMP_SPAWN") == ""){//etc . . .}
Alors ? Ba la virgule bien sur ! il manquait la virgule entre les deux paramètres, donc mieux vaut mettre
if(GetLocalString(oSpeak2, "TEMP_SPAWN") == ""){//etc . . .}
>>>===<<< >>>===<<<
une autre rigolote :
ERREUR : MULTIPLE CASE CONSTANT STATEMENTS WITHIN SWITCH
mm, en fait la le probleme se pose dans un switch, lorsque l'on donne plusieurs cas possible, si deux on le même numero, ba ca coince (et pour cause)
donc pas
switch(nTruc)
{
case 1:
//code
break;
case 2:
//code
break;
case 2:
//code
break;
}
mais
switch(nTruc)
{
case 1:
//code
break;
case 2:
//code
break;
case 3:
//code
break;
}
>>>===<<< >>>===<<<
tiens, une autre drole :
c trop long
Une string est limité à 510 caractère je crois (c t RAT qu'avait compté nan ? )
>>>===<<< >>>===<<<
une qui énerve (constatée y a pas longtemps )
ERREUR : SKIPPING DECLARATION VIA "case" STATEMENT DISALLOWED.
En gros, il ne faut pas faire de déclaration dans un endroit qui n'est pas forcement parcouru, bon, en gros hein, j'en sais pas plus que ca
Le truc, c'est de faire des blocs, car une varaible n'est déclarée que dans son bloc (me semble )
autrement dit pas
switch(nTruc)
{
case 1:
object oMachin;
break;
}
mais
switch(nTruc)
{
case 1:
{
object oMachin;
}
break;
}
>>>===<<< >>>===<<<
une autre fréquente et enervante (mais on a droit au nb de la ligne qui cloqche donc la pluspart du temps ca va
)
ERREUR : UNKNOWN STATE IN COMPILER
bon, alors c rarement la même chose, la dernière fois c t :
if( ...)
{
...
...
//c a la ligne suivante que ca cloche
if( ... )
}
il n'y avait rien derrière un if, donc ba g mis un truc
autre cas : l'oubli d'un ; à la fin d'une instruction
Le point virgule indique la fin de l'instruction au programme (c ca non ?) donc ba ca va lui faire tout drole si il peut pas prendre sa respiration entre deux phrases (qui n'a pas été interloqué par les erreurs de lectures de ces camarades de classes ^_^ )
>>>===<<< >>>===<<<
et maintenant, la pire rencontrée :
Erreur interne_: rapport du compilateur vide
et c tout, pas de ligne, rien
là en l'occurence, j'avais déclaré une fonction une fois, mais codé deux :
void FaisMachin();
void FaisMachin()
{
//code
return;
}
void FaisMachin()
{
//code
return;
}
>>>===<<< >>>===<<<
une nouvelle :
ERREUR : DUPLICATE FUNCTION IMPLEMENTATION
vous avez laissé le void main() de debugage dans l'include ^_^
d'un facon plus generale, il a trouvé deux foix une même fonction dans un script+divers includes, faites attention, il n'est pas la peine de redéclarer vos fonctions, mettre un include équivaut à copier tout cet include à cet endroit ^_^
rien n'est moins sure mais il semble que la ligne donnée soit celle de la fonction rencontrée deux fois, la deuxieme occurence, en l'occurence ( ^_~ ), l'accolade qui suit le nom de la fonction pour être précis, mais bon, pas de nombreux test, juste une remarque comme ca en passant . . .
plus au prochaine épisode ^_^
et participez, ca iras d'autant plus vite
EDIT : essai de rendre la chose lisible, et rajout de qq truc, dt les remarques de Jedai
arg, trop de smilyes MDR
EDIT2:idem, et merci à Taern ^_^ (ca va vite faire bcp d'edit ca . . .)