Pages : 1
#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
Pages : 1