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 :

Problème C++ (sous Visual 2010)


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Problème C++ (sous Visual 2010)
    Bonjour à tous !

    Je suis débutant en programmation c++ et je me suis inscrit sur ce forum en espérant y recevoir un peu d'aide sur un problème dont je ne trouve pas de solution...
    Voilà le topo : je dois créer une classe personne et une classe client qui en est dérivée (notions d'héritage). Un client est une personne.

    Voici mon code :

    Mon .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
    #include <iostream>
    #include <string>
    #include <iomanip>
    #include <fstream>
    using namespace std;
     
    ///////////////////////////
    // --------------------- //
    // GESTION DES PERSONNES //
    // --------------------- //
    ///////////////////////////
     
    //Classe Personne
    //---------------
    class Personne
    {
    protected :
    	string nom;
    	string prenom;
    	string adresse;
    	string ville;
    	string pays;
    	string mail;
    public :
    	Personne();
    	Personne(string no, string pr, string ad, string vi, string pa, string ma);
    	virtual void affiche();
    	~Personne();
    };
     
    //Classe Client
    //--------------
    class Client:public Personne
    {
    protected :
    	int numero;
     
    public :
    	Client(int nu, string no, string pr, string ad, string vi, string pa, string ma);
    	virtual void affiche();
    	~Client();
    };
    Mon .cpp
    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
    #include "projethotel.h"
     
    //Classe Personne//
    //---------------//
     
    Personne::Personne(string no, string pr, string ad, string vi, string pa, string ma) : nom(no), prenom(pr), adresse (ad), ville (vi), pays (pa), mail (ma)
    {
    	cout<<"Constructeur Personne"<<endl;
    }
     
     
    void Personne::affiche()
    {
    	cout<<endl<<"Nom: "<<nom<<endl <<"Prenom:"<<prenom<<endl;
    	cout<<"Adresse: "<< adresse<< endl <<"Ville: "<<ville<<endl;
    	cout <<"Pays: "<<pays<<endl <<"Mail: "<<mail<< endl;
    }
     
    Personne::~Personne(){cout<<"Destructeur Personne"<<endl;}
     
    //Classe Client//
    //-------------//
     
    Client::Client(int nu,string no, string pr, string ad, string vi, string pa, string ma) : numero(nu)
    {
    	cout<<"Constructeur Client"<<endl;
    }
     
    void Client::affiche()
    {
    	cout<<endl<<"Numero: "<<numero<<endl;
    	Personne::affiche();
    }
     
    Client::~Client(){cout<<"Destructeur Client"<<endl;}
    Et enfin mon main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "projethotel.h"
     
    void main ()
    {
    	Personne p1("Durant","Marc","Dreve","Tournai","Belgique","dur32@hotmail.com"); //TEST
    	p1.affiche();																			//D'AFFICHAGE Personne
     
    	Client c1(1,"Durant","Fred","Dreve","Tournai","Belgique","fredy@hotmail.com"); //TEST
    	c1.affiche();																			//D'AFFICHAGE Client
     
    	system("pause");
    }

    L'affichage de Personne fonctionne quand je mets en commentaire tout ce qui concerne ma classe Client.
    Par contre, en ajoutant ma classe client, j'ai ce message d'erreur qui s'affiche à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1>projethotel.obj : error LNK2019: symbole externe non résolu "public: __thiscall Personne::Personne(void)" (??0Personne@@QAE@XZ) référencé dans la fonction "public: __thiscall Client::Client(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Client@@QAE@HV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00000@Z)
    HELP !!!

  2. #2
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Désolé du dérangement mais un ami m'a donné la solution au problème par téléphone (je vous dis pas la galère xD) enfait , dans mon .cpp, je devais ajouter un petit truc :

    Client::Client(int nu,string no, string pr, string ad, string vi, string pa, string ma) : Personne(no,pr,ad,vi,pa,ma),numero(nu)
    {
    cout<<"Constructeur Client"<<endl;
    }

  3. #3
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Bonjour,

    La plupart des erreurs de ce type :
    symbole externe non résolu
    Signifie que tu as oublié la définition d'une fonction, ici la définition de ton constructeur par défaut de personne et effectivement il n'est pas dans ton cpp. Rajoute le.
    Homer J. Simpson


  4. #4
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci Astraya

  5. #5
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonsoir à tous ! J'ai encore quelques problèmes pour la finalisation de mon programme.

    Voilà le problème :

    J'ai ma classe Client :
    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
    //Classe Client
    //--------------
    class Client:public Personne
    {
    protected :
    	//infos client
    	static int IDclient;
    	int numeroclient;
     
    	//infos reserv chambre
    	Chambre* chambres[MAX];
    	int nombrechambres;
     
    	//infos reserv repas
    	Repas* repas[MAX];
    	int nombrerepas;
     
    	//infos reserv activité
    	Activite* activite[MAX];
    	int nombreactivite;
     
     
    public :
    	//gestion client
    	Client();
    	int clientLibre(); // Va chercher dans le tableau d'objet le 1ere emplacement libre.
    	void affiche();
    	void ajoutclients(Client &cli);
    	friend istream &operator>>(istream &i, Client &cli);
    	~Client();
     
    	//gestion reserv chambre
    	void ajouterchambre(Chambre* chamb);
    	void affichechambres();
     
    	//gestion reserv repas
    	void ajouterrepas(Repas* rep);
    	void afficherepas();
     
    	//gestion reserv activite
    	void ajouteractivite(Activite* act);
    	void afficheactivite();
    };
    Et j'ai mes autres classes (Chambre, Activité, Repas, ...)

    J'aimerais à la fin de mon programme, enregistrer tout mes objets dans des fichiers et conserver les relations qui existent entre eux.

    Exemple : j'ai un client X dont est liée une chambre Y (via pointeur comme vous le constatez). J'aimerais enregistrer mon client X, ma chambre Y, et aussi la liaison qui existe entre eux (donc le pointeur chambre dans Client).

    Le problème c'est que pour garder toutes ces relations, je dois enregistrer mes pointeurs et, si je ne me trompe pas, quand je vais relancer mon programme, les adresses de mes objets auront changées...

    Comment faire alors pour garder mes liaisons lors d'une future utilisation ?

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Il n'y a rien de trivial pour faire ça. S'il s'agit d'un exercice pour lequel tu dois tout faire à la main, le principe est de définir un format de message dans lequel tu mets toutes les informations dont tu as besoin : chaque instance de chaque classe mais aussi les liens qui les relient. Au chargement, tu dois parcourir ce fichier et reconstruire à la main les objets et leur relation. Bref, rien de trivial.
    Sinon, tu as Boost.Serialization qui fera tout le boulot pour toi.

  7. #7
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse 3DArchi !

    Cependant, je suis débutant en c++ et je ne comprends pas comment je peux re-lier mes objets entre eux, même avec ton explication.

    En effet, je dois tout faire "à la main". L'utilisation de Boost ne m'est pas permise.

    En fait, je ne comprends pas ceci :

    Si j'enregistre par exemple tous les objets de ma classe chambre dans un fichier, tout mes objets clients dans un autre fichier.
    Quand j'irais (lors d'une seconde exécution du programme) rechercher toutes les infos de chambre par exemple, et que je les replace dans mes tableaux d'objets, ces objets auront changés d'adresse non ? et donc les pointeurs que j'aurais été recherché dans client seront erronés ???

    Me trompes-je ?

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Non tu ne te trompes pas. Tu ne peux pas sauvegarder les adresses qui n'ont pas de sens en dehors d'une exécution à un moment donné. Il te faut reconstruire aux chargements des fichiers les associations entre tes objets (les pointeurs avec leur valeur effective).

  9. #9
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ok ! aurais-tu un tuto ou quoi que ce soit sur la manière de procéder ? Merci d'avance

  10. #10
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    C'est encore moi !

    A l'école, un autre élève m'a dit qu'il était possible d'enregistrer mes objets dans des fichiers binaires et que ca pourrait régler le problème de mes pointeurs...

    Est ce vrai ?

    Si oui, comment faire ? Merci d'avance !!

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 943
    Points
    4 943
    Par défaut
    non, faire un dump binaire de tes objets dans un fichier ne résoudra en rien tes relations entre tes objets.

  12. #12
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Je me disais aussi ^^' Merci quand même

Discussions similaires

  1. problème opencv2.3.1 sous Visual 2010 x86
    Par bind ways dans le forum C++
    Réponses: 3
    Dernier message: 01/03/2013, 17h00
  2. Problème OpenGL sous Visual C++ 2008
    Par shadow07 dans le forum Visual C++
    Réponses: 2
    Dernier message: 11/10/2011, 14h07
  3. Problème dll sous Visual Studio 64 bits
    Par Algernon2 dans le forum Visual Studio
    Réponses: 3
    Dernier message: 05/07/2010, 15h47
  4. Problème silverlight sous visual studio 2008
    Par Dragna_x dans le forum Développement Web avec .NET
    Réponses: 3
    Dernier message: 12/03/2010, 13h15
  5. Problème datagrid sous visual studio.net 2003
    Par tom34 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/06/2007, 14h12

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