Accueil > Forum > > > > Prob de compilation avec GNU C++, mais pas Borland
Prob de compilation avec GNU C++, mais pas Borland
jeudi 14 juillet 2005 à 19:40:21 |
Prob de compilation avec GNU C++, mais pas Borland

psdbdn
|
Bonjour, Voilà, je suis en train d'apprendre le c++ et j'ai décidé de tester le programme récapitulatif de la deuxième partie de mon bouquin. Mais à la compilation le lieur GNU me sort une vingtaine d'erreurs du type "multiple definition of `NoeudPieces::LireSuivant() const' en ligne 108". Le problème ne se pose pas pour les métodes membres implémentés lors de la déclaration. Le compilateur Borland compile pafaitement le programme, qui fonctionne correctement. Je n'arrive donc pas à compiler ce programme ni avec Dev-C++ (GNU), ni avec C++BuilderX (Borland) en choisissant le compilateur GNU, mais je le compile avec C++BuilderX avec le compilateur made in Borland. Quelqu'un pourrait-il m'expliquer le problème (et me dire comment le résoudre si possible) ? Je vous copie le code si dessous (il doit être sous copyright CampusPress, même avec mes petites modifications). Fichier "Classes.cpp" : /********************************* Classes.cpp ********************************* / / Déclaration et implémentation des classes. / / Classes : / -Pièce : contient les n° de pièces et d'autres info. / -NoeudPieces : noeud dans une ListePieces / -ListePieces : mécanisme pour une liste cheînée de pièces / /******************************************************************************/ #include <cstdlib> #include <iostream> using namespace std; //******************************** Piece *************************************** // Classe de base abstraite de pièces class Piece { public: Piece():wNumPiece(1){} Piece(int NumPiece):wNumPiece(NumPiece){} virtual ~Piece(){} int LireNumPiece() const { return wNumPiece; } virtual void Afficher() const =0; //doit être substituée private: int wNumPiece; }; //impémentation d'une fonction virtuelle pure pour chaîner les classes dérivées void Piece::Afficher() const { cout << "Numero de piece : " << wNumPiece << endl; } //****************************** PieceAuto ************************************* class PieceAuto : public Piece { public: PieceAuto():wAnneeAuto(1994){} PieceAuto(int Annee, int NumPiece); virtual void Afficher() const { Piece::Afficher(); cout << "Millesime : " << wAnneeAuto << endl; } private: int wAnneeAuto; }; PieceAuto::PieceAuto(int Annee, int NumPiece): wAnneeAuto(Annee), Piece(NumPiece) {} //***************************** PieceAvion ************************************* class PieceAvion : public Piece { public: PieceAvion():wRefMoteur(1){} PieceAvion(int RefMoteur, int NumPiece); virtual void Afficher() const { Piece::Afficher(); cout << "Reference du moteur : " << wRefMoteur << endl; } private: int wRefMoteur; }; PieceAvion::PieceAvion(int RefMoteur, int NumPiece): wRefMoteur(RefMoteur), Piece(NumPiece) {} //***************************** NoeudPieces ************************************* class NoeudPieces { public: NoeudPieces(Piece*); ~NoeudPieces(); void DefSuivant(NoeudPieces* pNoeud) { wpSuivant = pNoeud; } NoeudPieces* LireSuivant() const; Piece* LirePiece() const; private: Piece* wpPiece; NoeudPieces* wpSuivant; }; NoeudPieces::NoeudPieces(Piece* pPiece): wpPiece(pPiece), wpSuivant(0) {}; NoeudPieces::~NoeudPieces() { delete wpPiece; wpPiece = 0; delete wpSuivant; wpSuivant = 0; } //Renvoie NULL si pas de NoeuPieces suivant NoeudPieces* NoeudPieces::LireSuivant() const { return wpSuivant; } Piece* NoeudPieces::LirePiece() const { if(wpPiece) return wpPiece; else return NULL; //erreur } //******************************** ListePieces ********************************* class ListePieces { public: ListePieces(); ~ListePieces(); void Inserer(Piece*); Piece* LirePremier() const; int LireTotal() const { return wTotal; } Piece* operator[](int) const; Piece* Rechercher(int& position, int NumPiece) const; void Traiter() const; private: NoeudPieces* pTete; int wTotal; }; ListePieces::ListePieces(): pTete(0), wTotal(0) {} ListePieces::~ListePieces() { delete pTete; } Piece* ListePieces::LirePremier() const { if(pTete) return pTete->LirePiece(); else return NULL; //interception d'erreur } Piece* ListePieces::operator[](int Decalage) const { NoeudPieces* pNoeud = pTete; if(!pTete) return NULL; //interception d'erreur if(Decalage > wTotal) return NULL; //erreur for(int i=0; i<Decalage; i++) pNoeud = pNoeud->LireSuivant(); return pNoeud->LirePiece(); } Piece* ListePieces::Rechercher(int& Position, int NumPiece) const { NoeudPieces* pNoeud = 0; for(pNoeud=pTete, Position=0; pNoeud!=NULL; pNoeud=pNoeud->LireSuivant(), Position++) { if(pNoeud->LirePiece()->LireNumPiece() == NumPiece) break; } if(pNoeud == NULL) return NULL; else return pNoeud->LirePiece(); } void ListePieces::Traiter() const { if(!pTete) return; NoeudPieces* pNoeud=pTete; do pNoeud->LirePiece()->Afficher(); while( pNoeud = pNoeud->LireSuivant() ); } void ListePieces::Inserer(Piece* pPiece) { NoeudPieces* pNoeud = new NoeudPieces(pPiece); NoeudPieces* pEnCours = pTete; NoeudPieces* pSuivant = 0; int Nouveau = pNoeud->LirePiece()->LireNumPiece(); int Suivant = 0; wTotal++; if(!pTete) { pTete = pNoeud; return; } //si celui-ci est plus pettit que Tete, //il devient le noeud de tête. if(pTete->LirePiece()->LireNumPiece() > Nouveau) { pNoeud->DefSuivant(pTete); pTete = pNoeud; return; } for(;;) { //si pas de suivant, ajouter celui-ci if(!pEnCours->LireSuivant()) { pEnCours->DefSuivant(pNoeud); return; } //s'il vient après celui-ci et avant le suivant, //l'insérer ici, sinon lire le suivant pSuivant = pEnCours->LireSuivant(); Suivant = pSuivant->LirePiece()->LireNumPiece(); if(Suivant>Nouveau) { pEnCours->DefSuivant(pNoeud); pNoeud->DefSuivant(pSuivant); return; } pEnCours = pSuivant; } } //***************************** Fin de Classes.cpp ***************************** Fichier "main.cpp" : /************************** Révision de la Partie 2 **************************** / / Programme de démonstration de liste chaînée. / / Classes : / -Piece : contient les n° de pièces et d'autres info. / -NoeudPieces : noeud dans une ListePieces / -ListePieces : mécanisme pour une liste cheînée de pièces / /******************************************************************************/ //*************************** Début du Programme ******************************* //***************************** Initialisation ********************************* #include "Classes.cpp" //déclarations et implémentations //*************************** Corps du Programme ******************************* int main(int argc, char *argv[]) { ListePieces LP; Piece* pPiece = 0; int NumPiece; int Valeur; int Choix; while(1) { cout << "(0) quitter, (1)Auto, (2)Avion - Votre choix : "; cin >> Choix; if(!Choix) break; cout << "Entrez un numero de piece : "; cin >> NumPiece; if(Choix==1) { cout << "Millesime ? "; cin >> Valeur; pPiece = new PieceAuto(Valeur, NumPiece); } else { cout << "Reference moteur ? "; cin >> Valeur; pPiece = new PieceAvion(Valeur, NumPiece); } LP.Inserer(pPiece); } LP.Traiter(); system("PAUSE"); return EXIT_SUCCESS; } //**************************** Fin du Programme ********************************
|
|
jeudi 14 juillet 2005 à 19:42:55 |
Re : Prob de compilation avec GNU C++, mais pas Borland

psdbdn
|
J'ai oublié de précisé qu'il y a 2 fichiers (Classes.cpp et main.cpp). Merci de prêter attention à mon problème.
|
|
dimanche 17 juillet 2005 à 15:36:28 |
Re : Prob de compilation avec GNU C++, mais pas Borland

psdbdn
|
Réponse acceptée !
J'ai résolu mon problème en renommant le fichier "Classes.cpp" en "Classes.hpp". Désopilant. Sur ce, @+.
|
|
Cette discussion est classée dans : int, const, piece, pnoeud, noeudpieces
Répondre à ce message
Sujets en rapport avec ce message
Format de données [ par leskritiques ]
Voici le programme que je veux modofier :#include "chaine.h"#include "entreeSortie.h"#include "chaine.cpp"#include "entreeSortie.cpp"int pgcd (const i
Tableau avec new [ par Dalamar ]
bonjour, je suis incapable de créer un tableau multidimentionnel avec une fonction:TileEngine::TileEngine(const int w, const int h) { nTiles = w * h;
help resolution decran [ par leprov ]
bonjour a tousje maitrise pas mal le c++......ds un contexte etudiant, et donc je veux faire des applis pour chez moi et cest la merde, paske niveau g
ProB avec la fonction int remove (const char*) [ par Avalon10101 ]
_-=AvAloN=-_Jai un petit prob avec cette fonction :Je cré mon prog il na aucune erreur é il est donc pré à etre exécuter pour suprimer un fichier test
pk mon fond en console na pas de couleur ???? [ par maminova7775 ]
Voilà mon morceau de code : #include #include using namespace std ; const HANDLE MaConsoleEcran = GetStdHandle ( STD_INPUT_HANDLE ) ; const HAN
argument d'une fonction [ par tomalille ]
bonjour, j'ai une question qui va vous sembler très bête mais bon...J'ai besoin de faire une fonction ayant un tableau multidimentionnel en paramètre.
class matrice [ par flaky ]
Slt à tousJ'utilise une classe "matrice" (celle de nicolas aunai, téléchargée sur le site) qui fonctionne très bien. Mais j'ai du mal à manipuler l'ob
Marche pas : Changer la résolution de l'écran [ par yserver ]
Bojours.La réponse sera a prioris toute bête. Je pose qd même mon code qui à passer pour un idiot, mais faut bien avancer.Donc le pb c'est cette fonct
passage d 'un objet par référence en const : discard qualifiers [ par Yossi ]
Bonjour, je fais un passage par référence d'un objet dans nue méthode d'une classe, et je fais un appel à une méthode de l'objet passé en référence.
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|