Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/01/2013, à 22: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, à 22:43

eiger

Re : probleme de compilation du code c++

mbijeloroger a écrit :

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, à 22:50

mbijeloroger

Re : probleme de compilation du code c++

Merci 1000 fois big_smile
ç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, à 22: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, à 11: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