Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » [Aide SDK] Les erreurs de compilation
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

[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


Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17 ··· 20 ··· 24, 25, 26 Suivante
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 27/10/2013 21:20 | #


Bonsoir, j'ai un Type not compatible for "=" sur la dernière ligne.
int* data_segments;

[purple]int[/purple] AddIn_main(int isAppli, unsigned short OptionNum)
{
    [purple]unsigned int[/purple] key;
    [purple]int[/purple] i;
    Segment seg;

    [purple]int[/purple] niveau = [maroon]1[/maroon];
    [purple]int[/purple] max_segment;
    Cercle cercle = {[maroon]60[/maroon], [maroon]30[/maroon], [maroon]10[/maroon]};
    
    data_segments = malloc( 4 );


Je ne comprends pas pourquoi :/
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Citer : Posté le 27/10/2013 21:56 | #


Inclues stdlib.h ! A mon avis ça vient de là .
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 27/10/2013 22:11 | #


Et j'ai une autre question, comment je peux rapidement remplir mon tableau avec ce que je veux ?
Parce que faire :
data_segments = {1,2,3,...};

Ne fonctionne pas. Et je n'ai pas envie de faire
data_segments[0] = 1;
data_segments[1] = 2;
...
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 27/10/2013 22:18 | #


les nombres sont 1, 2, 3, etc. ?

for(i=0; i<taille_tableau; ++i) data_segments = i+1;
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 27/10/2013 22:45 | #


Pour n'importe quel nombre. Sans aucune logique.
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 28/10/2013 05:04 | #


utilise memcpy. syntaxe de memcpy:
memcpy((void*)pointerOut,(void*)pointerIn,size_t size)

pointerOut est le pointeur vers la zone mémoire ou tu veux copier les octets de mémoire en partant de pointerIn et size est le nombre d'octet a copier

tu peux utiliser des générations temporaires de listes (tu crée une liste temporaire que tu envoie dans pointerIn, la taille de la liste dans size et le liste que tu veux remplir dans pointerOut)

tu peux trouver une aide plus détaillée et des exemples (mais en anglais) sur Cpluplus.com
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 28/10/2013 16:10 | #


Merci, j'ai cependant beaucoup chercher pour penser à faire
memcpy(data_segments, niv, 3*sizeof(int));
Un simple 3 ne changeait rien

Mais par contre ça ne résout pas mon problème :
je voudrais un truc du genre :
charger_niveau(int niveau, int* data_segments, int* max_segment)
{    
    switch (niveau)
    {
    case 1:
        *max_segment = [maroon]3[/maroon];
        [purple]int[/purple] niv[] = {[maroon]1[/maroon],[maroon]34[/maroon],[maroon]2[/maroon]};
        [b][blue]break[/blue][/b];
    }
    
    data_segments = malloc( *max_segment * sizeof(int) );
    memcpy(data_segments, niv, *max_segment * sizeof(int));

Mais je suis obligé de mettre int niv[] = {1,34,2}; au début, je ne peux pas le mettre dans la condition.
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 28/10/2013 17:08 | #


le Sdk est mal foutu pour ça: regarde les sources de Gravity Duck, PLL remplace le switch par des if imbriqués. C'est moche, mais ça marche.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 28/10/2013 17:50 | #


Ok merci C'est ce que je regardais en plus, j'aurais jamais penser que cela puisse venir du switch :/
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 29/10/2013 14:06 | # | Fichier joint


Oh ça me gonfle le C, ça fait 2 jours que j'arrive pas à faire un truc tout simple !
Je veux juste que data_segments soit un tableau qui prend une certaine valeur en fonction de la variable niveau... Ca me prend 5 minutes en python ou ruby mais en C ça foire toutes les 30 secondes !
Si quelqu'un a le courage de regarder vite fait pour me montrer comment faire un truc propre, là c'est dégueulasse et ça fonctionne pas.
Je mes en pièce joint mon projet.
Si personne ne me trouve une solution, j'arrête le C, c'est de la merde !
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 29/10/2013 14:40 | #


Oh, du calme !
Le C est un langage bien plus complexe que le Java, le Ruby ou le Python. C'est très particulier et franchement, arriver à le maitriser te fera comprendre comment fonctionne tout les autres langages.
Pour ton problème, fait comme ceci :

void initSegments(char *data_segments, int numero)
{
    if(numero == 1)
    {
        char seg[] = {0, 1, 2, 3};
        memcpy(data_segments, seg, 4*sizeof(char));
    }
    else if(numero == 2)
    {
        char seg[] = {1, 4, 2, 7};
        memcpy(data_segments, seg, 4*sizeof(char));
    }
    ...
}


a utiliser comme ceci:

char data_segments[4];
int numero = 2;

initSegments(data_segments, numero);


Bref, c'est écrit en 5m, mais ça devrait marcher
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 29/10/2013 17:44 | #


Merci beaucoup, ça fonctionne effectivement très bien, seulement ça ne gère pas les tailles différentes pour data_segments, ici c'est 4, mais c'est pas grave je vais faire simple "pour le moment"
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 29/10/2013 19:17 | #


tu peux le modifier :

void initSegments(char *data_segments, int numero)
{
    if(numero == 1)
    {
        char seg[] = {0, 1, 2, 3};
        memcpy(data_segments, seg, 4*sizeof(char));
    }
    else if(numero == 2)
    {
        char seg[] = {1, 4, 2, 7, 6, 8, 6};
        memcpy(data_segments, seg, 7*sizeof(char));
    }
    ...
}

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 29/10/2013 20:32 | #


Oui ça j'avais deviné XD
C'est que la taille de data_segments est définie. donc je ne peux pas faire :
char seg[] = {1, 4, 2, 7, 6, 8, 6};
        memcpy(data_segments, seg, 7*sizeof(char));
si la taille de data_segments c'est 4. Et du coup j'avais fais un malloc, et dans la fonction void initSegments data_segment avait la bonne valeur, mais une fois que je quitte la fonction, ça devient n'importe quoi (des valeurs genre 15475426)
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 29/10/2013 21:26 | #


Au pire, tu met data_segments à la taille maximale, même si tu ne l'initialise pas en entier.

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 30/10/2013 20:40 | #


J'ai un problème:
extern "C" {
    #define __KEYBIOS_H__
    #include "fxlib.h"
    #include "MonochromeLib.h"
    #include "stdlib.h"
    #include "string.h"
}
#include <iostream>

Et il met met:
Erreurs
Cliquer pour enrouler
C:\Users\***\Desktop\all\prog caltos\add-in\mes add-in\***\***(10) : C2500 (E) Illegal token "C"
C:\OS\SH\include\ios(18) : C2500 (E) Illegal token "ostream"
C:\OS\SH\include\ios(31) : C2500 (E) Illegal token "ios_base"
C:\OS\SH\include\ios(31) : C2500 (E) Illegal token "{"
C:\OS\SH\include\ios(128) : C2500 (E) Illegal token "ios"
C:\OS\SH\include\ios(128) : C2500 (E) Illegal token "{"
C:\OS\SH\include\ios(168) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(169) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(170) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(171) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(172) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(173) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(174) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(175) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(176) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(177) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(178) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(179) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(181) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(182) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(183) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(185) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(186) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(187) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(189) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ios(190) : C2500 (E) Illegal token "&"
C:\OS\SH\include\streambuf(18) : C2500 (E) Illegal token "streambuf"
C:\OS\SH\include\streambuf(18) : C2500 (E) Illegal token "{"
C:\OS\SH\include\mystrbuf(27) : C2500 (E) Illegal token "mystrbuf"
C:\OS\SH\include\mystrbuf(27) : C2500 (E) Illegal token "{"
C:\OS\SH\include\istream(16) : C2500 (E) Illegal token "istream"
C:\OS\SH\include\istream(16) : C2500 (E) Illegal token "{"
C:\OS\SH\include\istream(93) : C2500 (E) Illegal token "istream"
C:\OS\SH\include\istream(93) : C2500 (E) Illegal token "{"
C:\OS\SH\include\istream(103) : C2500 (E) Illegal token "&"
C:\OS\SH\include\istream(103) : C2500 (E) Illegal token "char"
C:\OS\SH\include\istream(104) : C2500 (E) Illegal token "&"
C:\OS\SH\include\istream(104) : C2500 (E) Illegal token "unsigned"
C:\OS\SH\include\istream(105) : C2500 (E) Illegal token "&"
C:\OS\SH\include\istream(105) : C2500 (E) Illegal token "signed"
C:\OS\SH\include\istream(106) : C2500 (E) Illegal token "&"
C:\OS\SH\include\istream(106) : C2500 (E) Illegal token "char"
C:\OS\SH\include\istream(107) : C2500 (E) Illegal token "&"
C:\OS\SH\include\istream(107) : C2500 (E) Illegal token "unsigned"
C:\OS\SH\include\istream(108) : C2500 (E) Illegal token "&"
C:\OS\SH\include\istream(108) : C2500 (E) Illegal token "signed"
C:\OS\SH\include\istream(111) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(16) : C2500 (E) Illegal token "ostream"
C:\OS\SH\include\ostream(16) : C2500 (E) Illegal token "{"
C:\OS\SH\include\ostream(64) : C2500 (E) Illegal token "ostream"
C:\OS\SH\include\ostream(64) : C2500 (E) Illegal token "{"
C:\OS\SH\include\ostream(75) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(75) : C2500 (E) Illegal token "char"
C:\OS\SH\include\ostream(76) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(76) : C2500 (E) Illegal token "const"
C:\OS\SH\include\ostream(78) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(78) : C2500 (E) Illegal token "signed"
C:\OS\SH\include\ostream(79) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(79) : C2500 (E) Illegal token "unsigned"
C:\OS\SH\include\ostream(81) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(81) : C2500 (E) Illegal token "const"
C:\OS\SH\include\ostream(82) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(82) : C2500 (E) Illegal token "const"
C:\OS\SH\include\ostream(84) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(85) : C2500 (E) Illegal token "&"
C:\OS\SH\include\ostream(86) : C2500 (E) Illegal token "&"
C:\OS\SH\include\iostream(23) : C2500 (E) Illegal token "cin"
C:\OS\SH\include\iostream(24) : C2500 (E) Illegal token "cout"

Les *** représentent des noms que je ne veux pas qu'on voit

Je sais pas pourqoi ça fait ça

EDIT: il y a un problème avec les \ sur le formulaire je ne ai pas tous remis
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 31/10/2013 10:14 | #


Bon je suis pas sur de mon coup mais je pense que c est qu'il faut que tu marque #include "iostream" et non #include <iostream> vu que cette librairie n est pas forcément incluse dans le sdk. Après je laisse les personnes plus competantes que moi verifier ma réponse
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 31/10/2013 10:38 | #


Faut vérifier si la lib est bien supportée par le SdK, et oui, il faut la mettre entre guillemets. Pour ça, faut lire la doc fournie avec le SdK
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 31/10/2013 11:06 | #


Non, même avec des guillemets ça ne marche pas, bon, je ne l'ai pas mis du coup

Ajouté le 31/10/2013 à 13:49 :
Encore un truc qui m'agace: j'ai inclus ML, j'ai dé-commenté le #define ML_ALL dans le .h et il me met
Undefined external symbol "_ML_clear_vram" referenced

Le code:
ML_clear_vram();
ML_bmp_or(TitleScr,0,0,128,64);
ML_display_vram();
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 31/10/2013 14:11 | #


En gros, le SdK ne compile un fichier .c (ML.c entre autre) que si celui-ci a été modifié. Or, tu n'a modifié que ML.h, donc le SdK n'a pas vu que certaines fonctions sont utilisables.

Pour résoudre, deux solutions :

Soit "File" -> "Rebuild All"
Soit ouvrir le fichier ML.c, le modifier (mettre un espace, l'enlever, bref, un truc inutile mais que le compilo détectera), l'enregistrer, et compiler.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 31/10/2013 14:33 | #


Ok, je vais essayer la 2ème solution puisque la première n'a pas marchée

Ajouté le 31/10/2013 à 14:41 :
Non toujours pas, j'ai essayé tes deux solutions et ça ne marche pas
Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17 ··· 20 ··· 24, 25, 26 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 55 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd