[C++] Passage par adresse
Grmi91
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Je fais appel à vos services pour résoudre un problème de la plus petite impotance !!! loooool
En effet j'essaie d'accéder à une méthode en lui attribuant 2 paramètres, le premier de type char* blabla et le second de type char blablabla[50]. Bref voici plutôt un morceau de code :
Voici les erreurs à la compilation :
[****@poste27 progV8]$ g++ -o -lm robot robot.cpp liaisonSerie.cpp attrapObjet.cpp
robot.cpp: In function `int main(int, char**)':
robot.cpp:41: erreur: ne peut convertir « char (*)[50] » à « char* » pour l'argument « 2 » vers « char* constructionTrame(char*, char*) »
Donc si quelqu'un sait d'où vient l'erreur, ce serais sympa, même très sympa, de me le dire !!!
Merci à tous.
ps : j'ai tout essayé, mais pas réussi !!!!
Je fais appel à vos services pour résoudre un problème de la plus petite impotance !!! loooool
En effet j'essaie d'accéder à une méthode en lui attribuant 2 paramètres, le premier de type char* blabla et le second de type char blablabla[50]. Bref voici plutôt un morceau de code :
char* constructionTrame(char* trameAConstruire, char trame[50]); /************* Méthode principale *************/ int main(int argc, char *argv[]) { /* Déclaration des variables */ (...) char *trameAConstruire; char trame[50]; (...) constructionTrame (trameAConstruire, &trame); (...) } /* modifier trame[50] */ char* constructionTrame(char* trameAConstruire, char trame[50]) { (...) }
Voici les erreurs à la compilation :
[****@poste27 progV8]$ g++ -o -lm robot robot.cpp liaisonSerie.cpp attrapObjet.cpp
robot.cpp: In function `int main(int, char**)':
robot.cpp:41: erreur: ne peut convertir « char (*)[50] » à « char* » pour l'argument « 2 » vers « char* constructionTrame(char*, char*) »
Donc si quelqu'un sait d'où vient l'erreur, ce serais sympa, même très sympa, de me le dire !!!
Merci à tous.
ps : j'ai tout essayé, mais pas réussi !!!!
A voir également:
- [C++] Passage par adresse
- Darkino nouvelle adresse - Guide
- Adresse mac - Guide
- Changer adresse dns - Guide
- Adresse url - Guide
- Comment connaître son adresse ip - Guide
7 réponses
Corrige constructionTrame (trameAConstruire, &trame);
par constructionTrame (trameAConstruire, trame);
par constructionTrame (trameAConstruire, trame);
int main(int argc,char **argv){ char *trame=(char *)calloc(50,sizeof(char)); // ... constructionTrame (trameAConstruire,trame); // ... free(trame); //... }
La fonction main n'a rien à faire dans la classe robot, on n'est pas en java. Afin d'éviter la confusion avec les headers C, il serait judiceux de renommer robot.h en robot.hpp (mais c'est facultatif).
N'oublie pas qu'en C++ tu peux aussi utiliser les std::string (qui sont des chaînes virtuellement de taille infinie), ce qui évite de dimensionner arbitrairement tes chaînes.
#include <string> #include <iostream> void affiche_trame(const std::string & s){ std::cout << s << std::endl; } int main(){ std::string trame = "tapir"; // ... constructionTrame (trameAConstruire,trame); // ... affiche_trame(trame); // ... }
Bonne chance
Salut,
En fait c'est simple,
Soit tu fais char * truc dans le main
et tu l'appelles en char * dans ta fonction
Dans ce cas, n'oublie pas les new/delete
Soit tu fais char truc[taille] dans le main
et tu l'appelles en char truc[taille] dans ta fonction
Quand tu lances ta fonction ca sera
constructionTrame (trameAConstruire, trame);
Quand tu mets un & devant, c'est comme si tu parlais d'un char **
En fait c'est simple,
Soit tu fais char * truc dans le main
et tu l'appelles en char * dans ta fonction
Dans ce cas, n'oublie pas les new/delete
Soit tu fais char truc[taille] dans le main
et tu l'appelles en char truc[taille] dans ta fonction
Quand tu lances ta fonction ca sera
constructionTrame (trameAConstruire, trame);
Quand tu mets un & devant, c'est comme si tu parlais d'un char **
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui d'ailleurs l'utilisation de new et de delete est plus adéquate en C++ que calloc et free, plutôt reservés au C...
s'que tu veux dire c'est que je fasse :
????? si oui ba ensuite ça me met une erreur big up !!!! du style :
=>truc des bibliothèques
/* Prototype */ char* constructionTrame(char* trameAConstruire, char trame[50]); ************* Méthode principale *************/ int main(int argc, char *argv[]) { (...) char *trameAConstruire; char trame[50]; (...) constructionTrame (trameAConstruire, trame); (...) } /************* Méthode constructionTrame *************/ char* constructionTrame(char* trameAConstruire, char trame[50]) { (...) }
????? si oui ba ensuite ça me met une erreur big up !!!! du style :
collect2: ld terminé par le signal 11 [Erreur de segmentation] robot(.rodata+0x0): définitions multiples de « _fp_hw » /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crt1.o(.rodata+0x0): défini pour la première fois ici robot(.data+0x4): In function `__data_start': : définitions multiples de « __dso_handle » (...) /tmp/ccFXbvTY.o(.text+0x0): In function `attrapObjet::saisieObjet(char*)': : définitions multiples de « attrapObjet::saisieObjet(char*) » robot(.text+0x780): défini pour la première fois ici /usr/bin/ld: Warning: size of symbol `attrapObjet::saisieObjet(char*)' changed from 595 in robot to 519 in /tmp/ccFXbvTY.o /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crt1.o(.dynamic+0x0): définitions multiples de « _DYNAMIC » robot(.dynamic+0x0): défini pour la première fois ici
=>truc des bibliothèques
mais après correction toujour une erreur :
[****@poste27 progV8]$ g++ -o -lm robot robot.cpp liaisonSerie.cpp attrapObjet.cpp
robot.cpp: In function `int main(int, char**)':
robot.cpp:42: erreur: ne peut convertir « char (*)[50] » à « char* » pour l'argument « 2 » vers « char* constructionTrame(char*, char*) »
ps : faut-il que je fasse un fichier robot.h (le morceau de programme ci-dessus est issu du fichier robot.cpp) comme suit :