[Aide SDK] Les erreurs de compilation
Posté le 15/05/2011 00:10
Suite aux nombreuses demande d'aide que je reçois concernant des messages d'erreur lors de compilation avec le SDK, je décide de créer ce topic qui aura pour but de recenser tous les messages d'erreur, de les expliquer, et de donner leur solution.
Premièrement, qu'est ce qu'une erreur de compilation ?
Ici, ce sont les 4 lignes qui commencent par le chemin de mon fichier source contenant les erreurs (Z:\home\pierre\a\a.c) suivi du numéro de la ligne contenant l'erreur.
Liste des erreurs
Illegal token ''<mot>''
Description : Une erreur de syntaxe a été rencontrée
avant <mot> (un point virgule manquant, une parenthèse en trop ...)
Solution : Arrêter de coder avec les pieds.
Undeclared name ''<nom>''
Description : Une variable est utilisée sans avoir été déclarée au préalable.
Solution : Déclarer la variable au début de la fonction.
Cannot convert parameter ''X''
Description : Le paramètre n°X envoyé à la fonction n'est pas du bon type, et ne peut pas être converti.
Solution : Vérifier quel type de variable demande la fonction, et lui envoyer une variable du bon type.
Illegal initializer type
Description : Une variable est initialisée avec un type incorrecte (exemple, un entier initialisé avec une chaîne de caractère)
Solution : Initialiser la variable avec une valeur CONSTANTE correcte.
Le compilateur Renesas utilisé par le SDK respecte la norme C89, qui spécifie qu'une variable doit être initialisée avec une valeur constante, et non une valeur de retour de fonction, ou un paramètre de la fonction.
Multiple variable declarations
Description : Une variable a déjà le même nom et la même portée que celle déclarée à la ligne de l'erreur.
(Deux variables peuvent avoir le même nom si elles n'ont pas la même portée)
Solution : Nommer la variable différemment.
Type not compatible for ''=''
Description : L'affectation d'une valeur à une variable a échouée car la valeur n'est pas d'un type compatible avec celui de la variable.
Solution : Si la valeur affectée est un retour de fonction, vérifier quel type de variable retourne la fonction.
Modifiable lvalue required for ''=''
Description : Un élément non modifiable (comme une fonction où une constante) est suivi d'un signe égal.
Solution : Seule les variables peuvent se voir affecter une valeur avec ''=''.
Index not integer
Description : utilisation d'un float ou d'un double dans l'index d'une case de tableau.
Solution : Caster en int, tableau[double] devient tableau[(int)double]
Number of parameters mismatch
Description : Trop ou pas assez de paramètres sont envoyés à la fonction.
Solution : Regarder ce que demande la fonction, et le respecter.
Undefined external symbol ''_<nom de fonction>''
Description : Une fonction est appelée, mais son implémentation n'a pas été compilée.
Solution : Vérifier l'orthographe du nom, vérifier si le fichier contenant la fonction est bien dans la fenêtre ''Files in project''. Si tout ça est bon, essayez d'éditer le fichier contenant l'implémentation de la fonction (ajouter un espace, le supprimer, sauvegarder), ça permettra au compilateur de re-compiler le fichier.
couldn't open ''<nom de fichier>''
Description : Un fichier inclu avec #include n'existe pas.
Solution : Lors de l'inclusion d'un fichier, il faut donner son
chemin relatif depuis le fichier contenant la directive #include
Empty source program
Description : Le fichier source est vide, et aucun compilateur n'aime ça.
Cannot open source file ''<nom de fichier>''
Description : Le fichier source présent dans la fenêtre ''Files in project'' du SDK n'existe pas.
Unrecognized preprocessing directive
Description : Une directive de préprocesseur (lignes commençant pas #) n'est pas correctement orthographiée.
Illegal preprocessor syntax
Description : Erreur de syntaxe dans une directive de préprocesseur.
Expected a file name
Description : Un nom de fichier est attendu (généralement une erreur de syntaxe dans une directive include)
Expected an identifier
Description : Un identifiant est attendu (généralement une erreur de syntaxe dans une directive define ou ifdef)
Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj""
Description : Ne jamais installer le SDK dans un dossier dont le chemin comporte des parenthèses ! Mettez-le dans C:\Programmes\CASIO par exemple.
Cette liste est incomplète, si vous rencontrez d'autres erreurs, vous pouvez les poster ici, elles seront ajoutées.
Voici une liste en anglais de toutes les erreurs possibles et imaginables. Cela ne vous donne pas forcément une bonne solution, mais ça peut vous aiguiller sur une piste
Dernière modification : 26/09/2013 (Dark Storm)
Fichier joint
Citer : Posté le 10/04/2014 21:17 | #
Ah d'accord, merci, je vais regarder ! (et moi qui pensais qu'il y avait un problème avec l'icone du programme qu'il n'aurait pas trouvée... )
Coïncidence ? Je ne pense pas.
Citer : Posté le 13/06/2014 11:47 | #
Bonjour,
J'ai un petit problème avec mon code.
Il compile bien, mais je ne comprend vraiment pas ce qui ne va pas.
En effet, j'ai plein de 0 qui s'affiche sur l'écran de la calto alors qu'il ne devrait y en avoir qu'a :
(10*5,6*5), (11*5,6*5) et (12*5,6*5)
Pourtant ce n'est pas le cas, j'ai plein de zéro
Merci !
int Jeux(){
int pos[25][12] = {0};
int x;
int y;
pos[10][6] = 1;
pos[11][6] = 1;
pos[12][6] = 1;
while(1){
for (x = 1;x != 25;x++){
for (y = 1;y != 12; y++){
if (pos[x][y] = 1){
PrintMini(x*5,y*5,"0",1);
}
}
}
Bdisp_PutDisp_DD();
}
}
Citer : Posté le 13/06/2014 11:49 | #
(pos[x][y] = 1)
Il faut mettre ==
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 13/06/2014 11:51 | #
(pos[x][y] = 1)
Il faut mettre ==
Ah oui merci ! Erf, j'oublie tout le temps.
Citer : Posté le 15/06/2014 16:39 | #
Qu'est-ce que c'est que ce délire ?
Voici un tableau de pointeurs tout ce qu'il y a de plus normal :
Et voici ce qu'en pense le compilateur :
Avez-vous des suggestions ?
Citer : Posté le 15/06/2014 16:43 | #
Tu ne peux pas initialiser avec des variables quand c'est constant (il me semble) => enlève le const
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 15/06/2014 16:45 | #
J'ai essayé sans le const mais ça ne passe pas
En plus je procède exactement de la même façon que le Sprite Coder de Smashmaster.
Citer : Posté le 15/06/2014 16:49 | #
essaye en mettant le nombre de pointeur entre les []
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 15/06/2014 16:51 | #
J'ai essayé aussi, ça ne change rien
Ajouté le 15/06/2014 à 16:57 :
Voici le code complet de la fonction :
{
char infos[]={7,30,17,10,1,45,32,10};
unsigned char curseur1[]={
0x40,0x0, ... ,0x0
};
unsigned char curseur2[]={
0x40, ... ,0xfe
};
unsigned char *liste[]={curseur1,curseur2};
numero--;
ML_bmp_or(curseur2, infos[4*numero], infos[4*numero+1], infos[4*numero+2], infos[4*numero+3]);
}
Citer : Posté le 15/06/2014 17:04 | #
Tu as le droit de faire ça ?
Citer : Posté le 15/06/2014 17:05 | #
Ben oui, pourquoi pas ?
Citer : Posté le 15/06/2014 17:05 | #
Initializer should be constant.
Citer : Posté le 15/06/2014 17:07 | #
Justement, je cherche où est l'erreur.
Moi je donne les éléments pour résoudre le problème, et Lephenixnoir remonte jusqu'au problème à partir des éléments
Citer : Posté le 15/06/2014 17:09 | #
C'est ce que je cherche à te dire.
Tu n'as pas le droit de faire ça. Si tu veux le faire, tu dois initialiser chaque case du tableau indépendamment.
Citer : Posté le 15/06/2014 17:10 | #
Ah bon ? Mince alors, c'est ce Sprite Coder qui m'a induit en erreur
Citer : Posté le 15/06/2014 17:11 | #
Lui, il utilise des pointeurs const. C'est pas du tout pareil.
Citer : Posté le 15/06/2014 17:13 | #
Lui, il utilise des pointeurs const. C'est pas du tout pareil.
En fait mon code au-dessus est un peu modifié par rapport à ma tentative originelle. A la base j'avais aussi mis des const.
Citer : Posté le 15/06/2014 17:16 | #
Avec le Sprite Coder, ça fonctionne, non ? Donc part de son code et modifie-le petit à petit.
Citer : Posté le 15/06/2014 17:18 | #
C'est que j'ai fait, je l'ai même déjà dit :
Citer : Posté le 15/06/2014 17:20 | #
Tu as bien tout mis en const ?
Citer : Posté le 15/06/2014 17:21 | #
Mais oui...