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 20/11/2008, à 15:32

jeremie064

héritage

Bonjour à tous,

Un problème d'héritage se pose à moi.

Voici mon code simplifié :

dans un .h j'ai :

   class A
   {
      public:
         struct B
         {
            double toto;
            ....
         };
      private:
         std::vector<B> * b;
         ....
      public:
         A(std::vector<B> * b, int c);
   };

puis dans un autre fichier .h, j'ai une classe F qui hérite de A :

  class F : public A
  {};

Dans un code .cpp, je fais :
   for( set<F *>::const_iterator a = FSet.begin(); a!= FSet.end(); a++)
   {
      (*a)->A::toto = 4;
      ....
   }

Mais malheureusement voici l'erreur que j'obtiens dans mon make.log :
error : 'class F' has no member named 'toto'

Si quelqu'un pouvait m'aider à me dire ce qui cloche dans mon .cpp, ce serait très gentil !
Merci

Hors ligne

#2 Le 20/11/2008, à 15:36

philou8237

Re : héritage

Bah là tu as une classe A qui possède une struct B qui elle meme possède un membre toto
A ne possède pas de membre toto dans ton code.

Hors ligne

#3 Le 20/11/2008, à 15:41

jeremie064

Re : héritage

Mais comment je peux faire pour accéder à toto alors ? C'est impossible ?

Hors ligne

#4 Le 20/11/2008, à 15:44

rniamo

Re : héritage

créé un objet B (ajoute un nom avant le ; de la structure).


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#5 Le 20/11/2008, à 15:47

®om

Re : héritage

Bah toto il est dans struct B, il faut donc l'appeler à partir d'une instance de struct B, pas de A.

Hors ligne

#6 Le 20/11/2008, à 15:58

jeremie064

Re : héritage

Si je fais,

for( set<F *>::const_iterator a = FSet.begin(); a!= FSet.end(); a++)
   {
      (*a)->b[0]->toto = 4;
      ....
   }

alors  j'ai un nouveau message d'erreur :

error: within this context
error: base operand of '->' has non-pointer type 'std::vector<A::B, std::allocator<A::B> >'

Merci pour votre aide.

Hors ligne

#7 Le 20/11/2008, à 16:01

rniamo

Re : héritage

std::vector<B> * b; ? tu veux faire quoi ?


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#8 Le 20/11/2008, à 16:11

jeremie064

Re : héritage

C'est un code que je dois reprendre, et je ne dois pas modifier les classes (le vector est sûrement utile quelque part).
Je dois juste pouvoir valoriser la variable toto.

Hors ligne

#9 Le 20/11/2008, à 16:17

rniamo

Re : héritage

a->b[0].toto


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#10 Le 20/11/2008, à 16:22

jeremie064

Re : héritage

rniamo, voici le message d'erreur que j'obtiens si je fais ce que tu m'indiques :

error: 'std::vector<A::B, std::allocator<A::B> >* A::b' is private
error: within this context
error: 'class std::vector<A::B, std::allocator<A::B> >' has no member named 'toto'

Hors ligne

#11 Le 20/11/2008, à 19:28

rniamo

Re : héritage

(*a)->b[i].toto :$


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#12 Le 20/11/2008, à 20:42

Link31

Re : héritage

Bah A::b est privé. Qu'est-ce que tu croyais faire ?
Passe-le en public, ou mieux mets des accesseurs dans A ou dans F (en passant A::b en protected dans le cas de F).

Hors ligne

#13 Le 20/11/2008, à 22:20

rniamo

Re : héritage

ou mets protected dans A a la place


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne