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 :

Héritage, classe virtuelle


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 151
    Points : 83
    Points
    83
    Par défaut Héritage, classe virtuelle
    Bonjour,
    J'ai un problème bateau, mais malgré des recherches je ne trouve pas la solution.

    Je veux faire une classe abstraite et quelques classes qui en dérivent. Mais j'ai des erreurs.

    Voici le code: object.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Object{
    	public:
    		virtual ~Object() = 0;
     
    	protected:
    		std::string m_guid;
     
    	public:
    		std::string get_guid();
    };
    object.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "object.h"
     
     
    std::string Object::get_guid(){
    	return m_guid;
    }
    file.h : classe qui dérive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class File : public Object{
    	public:
    		File(std::string guid, std::string code, std::string name);
     
    		~File();
     
    	protected:
    		std::string m_code, m_name;
     
    	public:
    		std::string get_code();
    		std::string get_name();
    };
    file.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
    #include "file.h"
     
    File::File(std::string guid, std::string code, std::string name):
    m_guid(guid),
    m_code(code),
    m_name(name){
    }
     
     
    File::~File(){
    }
     
     
    std::string File::get_code(){
    	return m_code;
    }
     
    std::string File::get_name(){
    	return m_name;
    }
    Voici mon erreur de compil :
    file.cpp: In constructor «File::File(std::string, std::string, std::string)»:
    file.cpp:15: erreur: class «File» does not have any field named «m_guid»
    Mes il devrait en hériter ? non ?

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    On ne peut pas utiliser la liste d'initialisation directement sur les membres hérités. Il faut soit passer par le corps du constructeur ou alors par le constructeur de la classe parente.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Invité
    Invité(e)
    Par défaut
    En gros, t'ajoutes un constructeur à Object :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Object::Object(std::string guid)
      : m_guid(guid)
    {}
    Et le constructeur de File devient :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    File::File(std::string guid, std::string code, std::string name)
      : Object::Object(guid),
        m_code(code),
        m_name(name)
    {}

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 151
    Points : 83
    Points
    83
    Par défaut
    Ahh je ne savais pas tout ça.

    Je pensais que le constructeur n'était pas nécessaire pour une classe virtuelle.

    J'ai essayé sans et d'initialiser m_guid dans le constructeur de File mais ça ne marche pas non plus.

    Avec ta méthode, remram44, tout compile bien.

    Merci pour l'aide.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/10/2006, 12h28
  2. Classe virtuelle detructeur virtuel
    Par Jeane dans le forum C++
    Réponses: 3
    Dernier message: 26/06/2006, 23h06
  3. Héritage multiple virtuel
    Par Kant2006 dans le forum C++
    Réponses: 19
    Dernier message: 15/06/2006, 14h54
  4. Dynamic_cast & Base class virtuelle
    Par taron dans le forum C++
    Réponses: 5
    Dernier message: 11/02/2006, 20h45
  5. Réponses: 2
    Dernier message: 01/02/2006, 15h02

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