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 » Undefined external symbol string::insert
Aypee Hors ligne Membre Points: 5 Défis: 0 Message

Undefined external symbol string::insert

Posté le 20/11/2014 21:54

Salut à tous !
Voilà un moment que je cherche comment résoudre ce problème. Je compile un programme en c++ pour ma calc, et impossible d'utiliser la méthode insert de string. J'ai déjà eu plusieurs problèmes suite au peu de fonctionnalités c++ prises en charge par le SDK, mais apparemment cette fonction est bien déclarée dans <string>.
Voilà l'erreur :
** L2310 (E) Undefined external symbol "string::insert(unsigned long, const char *)" referenced in "xx/xx.obj"

Merci d'avance pour votre aide


Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message

Citer : Posté le 20/11/2014 22:13 | #


Regarde là : http://www.planet-casio.com/Fr/forums/topic9775-1--Aide-SDK--Les-erreurs-de-compilation.html
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.

Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 20/11/2014 23:29 | #


On ne peut pas utiliser la lib string
Il y a quelques autres fonctions de base qui ne fonctionnent pas non plus comme vector
Lephenixnoir En ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 21/11/2014 06:30 | #


Ninestars a écrit :
On ne peut pas utiliser la lib string
Il y a quelques autres fonctions de base qui ne fonctionnent pas non plus comme vector

Toute la réponse est là.

Le SDK supporte le langage C++, mais pas la Standard Template Library (qui sont deux choses bien distinctes). Il existe une norme qui stipule que tout compilateur C++ doit supporter la STL mais visiblement Hitachi (ou devrais-je dire, Renesas) ne s'en soucie pas.
Du coup, on n'a accès à aucun string, vector et autres conteneurs associatifs.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aypee Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 21/11/2014 09:15 | #


Merci pour vos réponses,
Oui en effet j'avais bien vu que la STL ne fonctionnait pas (à mon grand regret). Mais string est censé fonctionner je pense, étant donné que son fichier source est dans les fichiers du compilateur, et j'ai déjà réussi à créer un objet string, seule cette fonction pose problème. J'ai vu que certaines fonctions du string n'étaient pas prises en charge (comme push_back), mais insert est présent dans le fichier <string> du compilateur... Sinon j'essaierai de faire autrement, mais sans string ni STL je vais perdre du temps Je vais essayer de faire ce que me dit totoyo

Ajouté le 21/11/2014 à 09:32 :
J'utilise la méthode insert ainsi :
expression.insert(expression.length(), "^");
et le compilateur me dit
string::insert(unsigned long, const char *)
or expression.length renvoie un type size_t, comme ce qui est demandé par le prototype de insert
et le compilateur me parle d'un unsigned long (aucun prototype de insert n'est déclaré ainsi)

Je ne sais pas exactement ce qu'est size_t... Le problème ne viendrait-il pas de la ?
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 21/11/2014 09:49 | #


http://www.cplusplus.com/reference/cstring/size_t/

Unsigned integral type
Alias of one of the fundamental unsigned integer types.
Lephenixnoir En ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 21/11/2014 18:10 | #


Aypee a écrit :
j'avais bien vu que la STL ne fonctionnait pas (à mon grand regret). Mais string est censé fonctionner je pense, étant donné que son fichier source est dans les fichiers du compilateur, et j'ai déjà réussi à créer un objet string, seule cette fonction pose problème.

Ce n'est pas aussi simple : le compilateur de Renesas supporte une partie de la STL, mais dans ton cas impossible de créer un vector par exemple. Quant aux headers, ne t'y fie pas, ils ont copiés ceux existants dans une autre application : stdio.h contient même le prototype de printf() qu'ils n'ont jamais écrite !

Aypee a écrit :
J'ai vu que certaines fonctions du string n'étaient pas prises en charge (comme push_back), mais insert est présent dans le fichier <string> du compilateur...

Comme je l'ai dit le support est partiel. Mais, autre problème, les fonctions existantes ne sont pas assurées de fonctionner correctement !

Aypee a écrit :
Sinon j'essaierai de faire autrement, mais sans string ni STL je vais perdre du temps

C'est pour ça qu'elle devrait exister avec tout compilateur.

Quant à size_t, c'est juste un typedef d'unsigned int défini dans stddef.h, stdlib.h et stdio.h. Tu peux mettre un int sans problème ! Le principe est juste de limiter au minimum la taille de la chaîne, bien que tu n'alloueras jamais une chaîne de plus de INT_MAX caractères.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aypee Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 22/11/2014 17:27 | #


Merci, donc impossible d'utiliser string... Tant pis !
Lephenixnoir En ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 22/11/2014 17:43 | #


Sinon, tu peux toujours l'implémenter toi-même mais c'est sûr que c'est long.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

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 85 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