Je suis nouveau sur le site et j'apprends à programmer dans une école où les profs ne sont pas très compétents (je tairai le nom bien entendu xD)
J'ai un soucis ac mon code d'implémentation d'arbre et comme je ne connais pas très bien le site, je ne sais pas si je poste au bon endroit.
En gros, je travaille sous eclipse (il trouve que c'est mieux que sous Msys)et qd il compile, il me met une foule d'erreurs. J'ai eu beau réécrire le code, lire des tas de documentations, je ne trouve pas pourquoi. Et tout ce que mon prof trouve à me répondre c'est "cherchez bien" -_-'
Je ne sais pas si je dois mettre le code ici ou pas parce qu'il est composé de trois fichiers et qu'il est un peu long mais si quelqu'un veut bien m'aider, ce serait sympa
Merci d'avoir lu tout ce speech et j'attends vos réponses
PS : je trouve ce site vraiment génial, c'est comme ça que jme suis rendu compte à quel point nos profs étaient nases xD
Donc en fait je crée un maketarget à partir du makefile et j'obtiens ça comme erreur alors qu'il devrait me créer un fichier dans le binaries, un exécutable :
**** Build of configuration MinGW GCC for project FI3-C++ ****
make test
g++ -I/usr/home/Ange_shini/FI3-C++/tp/include -I/usr/home/Ange_shini/FI3-C++/tp/src -c /usr/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp -o /usr/home/Ange_shini/FI3-C++/tp/compil/tp5/test_arbre.o
In file included from C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:19:
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h:62: error: expected `;' before "throw"
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h:67: error: expected `;' before "Arbre"
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h: In member function `fr::emn::eleves::TOTO::tp5::Arbre<T>& fr::emn::eleves::TOTO::tp5::Arbre<T>::operator=(const fr::emn::eleves::TOTO::tp5::Arbre<T>&)':
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h:68: error: expected `;' before ')' token
In file included from C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h:111,
from C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:19:
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/src/tp5/Arbre.cxx: At global scope:
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/src/tp5/Arbre.cxx:85: error: no `fr::emn::eleves::TOTO::tp5::StructArbre<T>::~StructArbre()' member function declared in class `fr::emn::eleves::TOTO::tp5::StructArbre<T>'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/src/tp5/Arbre.cxx:85: error: template definition of non-template `fr::emn::eleves::TOTO::tp5::StructArbre<T>::~StructArbre()'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp: In function `int main()':
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:109: error: 'class fr::emn::eleves::TOTO::tp5::Arbre<std::string>' has no member named 'position'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:129: error: 'class fr::emn::eleves::TOTO::tp5::Arbre<std::string>' has no member named 'position'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:139: error: 'class fr::emn::eleves::TOTO::tp5::Arbre<std::string>' has no member named 'position'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:147: error: 'class fr::emn::eleves::TOTO::tp5::Arbre<std::string>' has no member named 'position'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:149: error: 'class fr::emn::eleves::TOTO::tp5::Arbre<std::string>' has no member named 'position'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:152: error: no match for 'operator==' in 'arbre12345 == arbre12345'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:153: error: no match for 'operator==' in 'arbre12345 == arbre234'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:167:2: warning: no newline at end of file
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h: At global scope:
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h: In instantiation of `fr::emn::eleves::TOTO::tp5::StructArbre<std::string>':
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h:40: instantiated from `fr::emn::eleves::TOTO::tp5::Arbre<T>::Arbre() [with T = std::string]'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:102: instantiated from here
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/include/tp5/Arbre.h:23: error: initializer specified for non-virtual method `bool fr::emn::eleves::TOTO::tp5::StructArbre<T>::estEgal(fr::emn::eleves::TOTO::tp5::StructArbre<T>*) [with T = std::string]'
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp: In function `bool trouver(const T&, const fr::emn::eleves::TOTO::tp5::Position<T>&) [with T = std::string]':
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:116: instantiated from here
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:79: error: passing `const fr::emn::eleves::TOTO::tp5::Position<std::string>' as `this' argument of `fr::emn::eleves::TOTO::tp5::Position<T> fr::emn::eleves::TOTO::tp5::Position<T>::gauche() [with T = std::string]' discards qualifiers
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:116: instantiated from here
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:83: error: passing `const fr::emn::eleves::TOTO::tp5::Position<std::string>' as `this' argument of `fr::emn::eleves::TOTO::tp5::Position<T> fr::emn::eleves::TOTO::tp5::Position<T>::droit() [with T = std::string]' discards qualifiers
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp: In function `void afficher(const fr::emn::eleves::TOTO::tp5::Position<T>&) [with T = std::string]':
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:130: instantiated from here
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:26: error: passing `const fr::emn::eleves::TOTO::tp5::Position<std::string>' as `this' argument of `fr::emn::eleves::TOTO::tp5::Position<T> fr::emn::eleves::TOTO::tp5::Position<T>::gauche() [with T = std::string]' discards qualifiers
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:130: instantiated from here
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/projets/tp5/test_arbre.cpp:28: error: passing `const fr::emn::eleves::TOTO::tp5::Position<std::string>' as `this' argument of `fr::emn::eleves::TOTO::tp5::Position<T> fr::emn::eleves::TOTO::tp5::Position<T>::droit() [with T = std::string]' discards qualifiers
C:/msys/1.0/home/Ange_shini/FI3-C++/tp/src/tp5/Arbre.cxx:51: confused by earlier errors, bailing out
make: *** [test_arbre.o] Error 1
Voilà, alors je pense que les erreurs sont liées entre elles mais je n'arrive pas à les corriger -_-'
Merci de votre aide
J'en sais rien c'est notre prof qui nous a dicté des lignes de code sans rien nous expliquer et j'essaye de comprendre en fait
dans mon cours, c'est décrit comme un proxy(mandataire) cad un intermédiaire qui reçoit des appels et les retransmets avec des contrôles et des ajustements -_-'
Le mieux c'est de t'acheter une bonne bible (genre le C++ de Stroupstrup qui est un excellent ouvrage à mon avis (que je n'ai pas encore fini)) si ton prof n'arrive pas à remplir son rôle.
Ben en fait on m'a prêté le C++ trucs et astuces pour les nuls mais j'y pige que dal (ouais plus nul que nul, ça existe xD)
Sinon j'avais emprunté un bouquin au CDI mais il n'expliquait pas gd chose en fait ils disent juste faites vi, faites ça et au final on est tjr aussi con...
Les specs d'exceptions sont valides (c'est un pièges à newbs, car cela ne fait pas du tout ce que les gens croient que cela fait (cf GOTW je crois)), mais c'est valable.
J'ai vu que :
- il manquait un virtual (pour une fonction membre avec un =0, mais sans le virtual obligatoire avant),
- qu'il n'est pas très futé de donner un nom de paramètre qui correspond au nom d'une autre fonction membre
- qu'il manque des const
- qu'il manque tous les "this->", templates exigents.
- des using avant des inclusions (chose qui provoquera inmanquablement des erreurs)
- l'implementation des template dans un .cpp (erreur connue et signalée dans maintes FAQ)
Merci pour tes informations lmghs mais du coup ça m'amène à poser une autre question : qu'est-ce qu'une variable "virtual" ? Pourquoi on la déclare virtual ? Et à quoi sert const ?
Je sais ça fait bcp de questions mais mon prof est vraiment mauvais pour expliquer quoi que ce soit -_-'
Une classe virtual (ou abstraite) est une classe qui ne peut pas être instancié car elle contient au moins une méthode pure ( méthode avec =0 a la fin et le mot clé virtual devant).
Une méthode pure est une méthode qui n'est pas définie du tout, mais qui sera redéfinie dans une classe fille (ou pas si il n'y a pas de classe fille, mais ça ne sert à rien alors).
Une méthode virtual (sans le =0 mais avec le mot clé virtual) est une méthode qui nécessite d'être redéfinie dans les classes fille mais qui est définie pour une utilisation dans sa classe mère.
N'existent pas:
- "classes virtuelles", on parle de classes abstraitees, ou de classes *de* *base* virtuelle
- "variable virtuelle", seules les fonctions membre peuvent l'être
- "méthodes", on dit "fonction membre" en C++ : ce que l'on appelle "méthode" dans les autres langages se rapporcherait plus des "fonctions membre virtuelles" en C++.
const est un mot clé qui s'applique sur ce qui le précède (inverser avec ce qui suit s'il n'y a rien avant) et qui signale qu'une donnée ne peut pas être modifiée (dans le contexte où le const est présent) -- Déjà abordé plusieurs fois cette dernière semaine -> recherche + FAQs ...
Le "virtual" est lié au polymorphisme (d'inclusion), il flaggue les fonctions membre dont le comportement pourra être supplanté dans les classes filles.
flaggue, c'est une francisation de "flag" qui veut dire "drapeau"
En fait, en informatique, on appelle "flag" une variable booleenne : qui contient donc un 0 ou un 1.
L'image de drapeau est une métaphore au jeux comme le foot par exemple :
Quand le drapeau est levé il se passe ça, quand il n'est pas levé, il se passe ça : le drapeau levé ou non défini finalement une variable booléenne.
Dans le contexte, lmghs te dit que le "virtual" sert de flag (donc de donnée booleenne) pour dire si le compilo choisira la méthode mere ou fille.
Bon alors merci pour tout : je pense avoir tout refait et réussi car il me génère bien le fichier .o que je devais avoir...En réalité les erreurs signalées par lmghs m'ont bien aidé.
Si vous voulez que je mette le code pr vérifier mais apparemment ça marche (en fait j'avais oublié pas mal de trucs parce que je ne comprenais rien xD)
merci à tous
Les arbres en C++
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html