IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

undefined reference to. Impossible de creer une instance


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut undefined reference to. Impossible de creer une instance
    Bonjour à tous, alors voila pour mon problème il s'agit d'un problème que je rencontre régulierement lorsque je code en C++ aussi je vous demande votre aide pour qu'enfin je sache le résoudre ^^.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    /*
     * EtatRobot.cpp
     *
     *  Created on: 12 déc. 2009
     *      Author: blanc
     */
     
    #include "EtatRobot.h"
    #include "Position.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
     
    EtatRobot::EtatRobot() {
    	direction = "Nord";
    	position = new Position(0,0);
    	obstacle = NULL;
    	objet = NULL;
    	robot = new Robot();
    }
     
    EtatRobot::~EtatRobot() {
    	// TODO Auto-generated destructor stub
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    /*
     * EtatRobot.h
     *
     *  Created on: 12 déc. 2009
     *      Author: blanc
     */
     
    #ifndef ETATROBOT_H_
    #define ETATROBOT_H_
     
    #include "Robot.h"
    #include "Position.h"
    #include "Obstacle.h"
    #include "Objet.h"
    #include <string>
     
    using namespace std;
    class Robot;
     
    class EtatRobot {
    private:
    	Robot* robot;
    	string nomEtat;
    	string direction;
    	Position* position;
    	Obstacle* obstacle;
    	Objet* objet;
    public:
    	EtatRobot();
    	virtual ~EtatRobot();
    };
     
    #endif /* ETATROBOT_H_ */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include "Robot.h"
    #include "Position.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
     
    using namespace std;
     
    //class EtatRobot;
     
    Robot::Robot()
    {
    	direction = "Nord";
    	position = new Position(0,0);
    	obstacle = NULL;
    	objet = NULL;
    	etat = new EtatRobot();
    }
     
    Robot::~Robot() {
    	// TODO Auto-generated destructor stub
    }
     
    void Robot::avancer(int distance)
    {
    	cout << "Le robot avance de " << distance << " cm.\n";
    }
    void Robot::tourner(string direction)
    {
    	cout << "Le robot tourne vers la direction " << direction << ".\n";
    }
    void Robot::saisir(Objet* o)
    {
    	objet = o;
    	cout << "Le robot saisi l'objet.\n";
    }
    void Robot::poser()
    {
    	objet = NULL;
    	cout << "Le robot pose l'objet;\n";
    }
    void Robot::peser()
    {
    	cout << "Le robot pèse l'objet... L'objet pèse : " << objet->getPoids() << " grammes.\n";
    }
    void Robot::rencontrerObstacle(Obstacle* o)
    {
    	obstacle = o;
    	cout << "Le robot rencontre un obstacle\n";
    }
    void Robot::evaluerObstacle()
    {
    	cout << "Le robot evalue l'obstacle... Il a pour hauteur " << obstacle->getHauteur() << "cm.\n";
    }
    void Robot::arreter()
    {
    	cout << "Le robot s'arrete";
    }
    void Robot::repartir()
    {
    	cout << "Le robot redémarre";
    }
     
    void Robot::afficher() {
    	cout << "Affiche le chemin parcouru par le robot";
    }
     
    Position* Robot::getPosition() {
    	return position;
    }
     
    Obstacle* Robot::getObstacle() {
    	return obstacle;
    }
     
    Objet* Robot::getObjet() {
    	return objet;
    }
     
    string Robot::getDirection() {
    	return direction;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    /*
     * Robot.h
     *
     *  Created on: 27 nov. 2009
     *      Author: Chido
     */
     
    #ifndef ROBOT_H_
    #define ROBOT_H_
     
    #include "EtatRobot.h"
    #include "Position.h"
    #include "Obstacle.h"
    #include "Objet.h"
    #include <string>
     
    using namespace std;
     
     
     
    class Robot {
    private:
    	string direction;
    	Position* position;
    	Obstacle* obstacle;
    	Objet* objet;
    	EtatRobot* etat;
    public:
    	Robot();
    	virtual ~Robot();
    	void avancer(int distance);
    	void tourner(string direction);
    	void saisir(Objet* o);
    	void poser();
    	void peser();
    	void rencontrerObstacle(Obstacle* o);
    	void evaluerObstacle();
    	void arreter();
    	void repartir();
    	void afficher();
    	Position* getPosition();
    	Obstacle* getObstacle();
    	Objet* getObjet();
    	string getDirection();
    };
     
    #endif /* ROBOT_H_ */
    Mon problème est donc dans le Robot.cpp qui me met une erreur à la ligne 17 : etat = new EtatRobot();

    L'erreur étant undefined reference to EtatRobot::EtatRobot()

    Je n'ai pas inclu le code des autres classes dites moi si cela est necessaire.
    Je code sous ubuntu 9.10 avec eclipse.

    Voila merci d'avance en esperant que cette question n'ai pas été déjà trop poser j'ai chercher rapidement mais je suis dans le train donc ma connection n'est pas idéale.

    Edit : J'ai essayer avec class EtatRobot; et sans même résultat... J'ai essayer d'inclure le .h directement dans le CPP pas de différence. La seule maniere que j'ai trouver est de ne pas initialiser mon instance etat mais bon j'en ai besoin :s

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 26
    Par défaut
    Essaye de déplacer la ligne '#include "Robot.h"' du fichier EtatRobot.h à EtatRobot.cpp . Ce n'est pas nécessaire dans le h parce que tu peut utiliser la 'forward declaration' 'class Robot' sans inclure le header.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Merci pour ta réponse.
    Cela fonctionne aussi, malheureusement ne résout pas mon problème :/. mon etat = new EtatRobot(); a toujours le même problème.

    D'autre suggestion ?

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne connais pas eclipse et peu gcc, donc je n'ai pas forcément l'habitude des messages d'erreurs, mais ce message ressemble plus à un problème au link qu'à un problème de compilation. Ce qui signifie probablement qu'il y a un problème dans ton makefile/projet qui fait que les deux fichiers .o/.obj/.??? qui sont générés par la compilation de tes cpp ne se voient pas l'un l'autre.


    A part ça, dans le constructeur de Robot, tu fait new EtatRobot, et dans celui d'EtatRobot, tu fais new Robot... Ne penses-tu pas que tu vas avoir des soucis ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    En effet il risque d'y avoir un probleme :s. La solution serait de initialiser mon robot dans une autre méthode que mon constructeur alors ? Sinon pour le makefile en effet j'avais oublier de créer les nouvelles dépendances
    Même si mon problème n'est pas résolu (je pense en effet que le fait de faire appel l'une a l'autre dans les constructeurs doit poser problème. Donc je vais chercher un peu merci en tout cas pour le coup de main. Je vous tiens informer de l'avancement ^^

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Bon bah je confirme probleme resolu j'initialise ma variable etat dans une autre méthode et sa fonctionne . Merci pour le coup de main

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/04/2008, 16h05
  2. Réponses: 2
    Dernier message: 21/02/2008, 15h27
  3. Comment creer une instance de visual studio et manipuler ?
    Par Battosaiii dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2008, 15h32
  4. Impossible de creer une Procédure Stockée
    Par freud dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 15/07/2007, 19h48
  5. [8.5] Impossible de creer une table croisée avec une variable shared
    Par rihiveli dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 20/04/2007, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo