#1 Le 29/01/2013, à 21:31
- mbijeloroger
probleme de compilation du code c++
salut à tous
y a pas trop de temps que je me suis lancé dans le c++ alors, j'ai réalisé un tp consistant à créer une classe point(x,y) et de recupérer la saisie de l'utilisateur afin de lui afficher les coordonnées de son point.
alors je possède trois fichiers à savoir:
le cpoint.h qui a pour code:
class cpoint
{
// les attributs de la classe
private:
float x ;
float y ;
// les methodes de la classe
public:
void init(float xx, float yy);
float getx();
float gety();
void affiche();
};
le cpoint.cpp
#include <iostream>
#include "cpoint.h"
using namespace std;
void cpoint::init(float xx, float yy)
{
x = xx;
y = yy;
}
// les accesseurs
float cpoint::getx()
{
return x;
}
float cpoint::gety()
{
return y;
}
// affichage
void cpoint::affiche()
{
cout<<getx() << gety();
}
et le fichier main
#include <iostream>
#include "cpoint.h"
using namespace std;
int main()
{
cpoint point;
float x,y;
cout<<"Entrer x :" ; cin>>x;
cout<<"Entrer xy:" ; cin>>y;
point.init(x,y);
point.affiche();
return 0;
}
lorsque je comile ce programme en tapant dans le terminal g++ -o main main.cpp
j'ai le message suivant:
/tmp/ccnkAmX7.o: In function `main':
main.cpp:(.text+0x5a): undefined reference to `cpoint::init(float, float)'
main.cpp:(.text+0x66): undefined reference to `cpoint::affiche()'
collect2: ld returned 1 exit status
tout ceci me laisse très perplexe car ça fait un bon bout que j' cherche à resoudre ce problème de moi même et aussi avec google mais rien et donc je me dis qu'ici je pourrais peut être en savoir un peu plus sur ce sujet
merci d'avance à vous.
Hors ligne
#2 Le 29/01/2013, à 21:43
- eiger
Re : probleme de compilation du code c++
g++ -o main main.cpp
j'ai le message suivant:
/tmp/ccnkAmX7.o: In function `main':
main.cpp:(.text+0x5a): undefined reference to `cpoint::init(float, float)'
main.cpp:(.text+0x66): undefined reference to `cpoint::affiche()'
collect2: ld returned 1 exit status
Salut,
Je vais commencer par répondre à ta question, ensuite j'ajouterai quelques remarques.
Ta ligne de compilation dit à g++ de créer ton exécutable à partir de main.cpp. Et le fichier cpoint.cpp, tu ne veux pas le compiler ?
Le message d'erreur que tu vois viens du linker qui te dit "je ne sais pas où est défini cpoint::init()". Forcément, tu n'as pas compilé le fichier qui contient la définition.
Donc essaie avec
g++ -o main cpoint.cpp main.cpp
Hors ligne
#3 Le 29/01/2013, à 21:50
- mbijeloroger
Re : probleme de compilation du code c++
Merci 1000 fois
ça fonctionne parfaitement
avec l'explication en plus je comprends maintenant ce qui ce passe lors de la compilation.
Je te remercies grandement car je vais pouvoir continuer mon travail.
Hors ligne
#4 Le 29/01/2013, à 21:59
- eiger
Re : probleme de compilation du code c++
Bon, les remarques maintenant :
- le "using namespace std" dans la portée globale de ton fichier, c'est pas top top (si tu as le courage tu peux chercher sur ce forum, il y a suffisamment de posts où la question est évoquée). Utiliser "std::cout" n'est pas bien plus long que "cout". Ceci dit, c'est très (trop) fréquent dans les exemples de C++
- au lieu d'avoir une fonction "init", il serait préférable d'avoir un constructeur pour ta classe, auquel tu peux très bien passer les paramètres x et y. Et ça t'évite d'avoir un objet non complètement défini pendant quelques lignes.
- tu pourrais définir les accesseurs en "const" pour signaler qu'ils ne modifient pas les instances de cpoint
Voilà, pour le reste, je te laisse jouer.
Hors ligne
#5 Le 31/01/2013, à 10:00
- Feeling97
Re : probleme de compilation du code c++
Essaies aussi d'utiliser les balises code (bouton <> dans l'éditeur de messages) pour que ton code ressemble à ça:
int main() { ... }
Steam en natif sous Ubuntu
Ordinateur portable Asus K73S avec Ubuntu 12.04.2 LTS en dual boot avec Windows 7 Ultimate Edition et BURG pour le boot.
Hors ligne