2010-05-30 3 views
4

Je suis nouveau à C++, et disons que j'ai deux classes: Creature et Human:Un struct public à l'intérieur d'une classe

/* creature.h */ 
class Creature { 
private: 
public: 
    struct emotion { 
     /* All emotions are percentages */ 
     char joy; 
     char trust; 
     char fear; 
     char surprise; 
     char sadness; 
     char disgust; 
     char anger; 
     char anticipation; 
     char love; 
    }; 
}; 

/* human.h */ 
class Human : Creature { 

}; 

Et je dans ma fonction principale main.cpp:

Human foo; 

Ma question est: comment puis-je définir les émotions de foo? J'ai essayé ceci:

foo->emotion.fear = 5; 

Mais GCC me donne cette erreur de compilation:

error: base operand of '->' has non-pointer type 'Human'

Ce:

foo.emotion.fear = 5; 

donne:

error: 'struct Creature::emotion' is inaccessible
error: within this context
error: invalid use of 'struct Creature::emotion'

Quelqu'un peut-il me aider? Merci


P.S. Non, je ne l'ai pas oublié le #include s

+4

"Coilette ta mort me remplit wih douleur, (en colère) colère, (peur) peur, (normal) chaque émotion un acteur peut afficher." - Calculon –

Répondre

12

Il n'y a pas de variable du type emotion. Si vous ajoutez un emotion emo; dans votre définition de classe, vous pourrez accéder à foo.emo.fear comme vous le souhaitez.

+0

Ceci, en combinaison avec la réponse de Kenny a fait le travail (Y) –

+2

Intéressant de voir comment certaines personnes repèrent le problème de l'héritage d'abord tandis que d'autres sont plus sensibles à l'absence de variables :). – Pieter

+0

+1 Pieter ...... –

6
class Human : public Creature { 

C++ par défaut héritage privé pour class es.

3

Modifiez l'héritage du public et définissez un membre struct emotion dans la classe Creature (par exemple, emo). (. ex toto)

vous pouvez donc instancier des objets de la classe humaine et les valeurs de Atrib à ses membres comme

foo.emo.fear = 5; 

ou

foo->emo.fear = 5; 

code modifié:

/* creature.h */ 
class Creature { 
private: 
public: 
    struct emotion { 
     /* All emotions are percentages */ 
     char joy; 
     char trust; 
     char fear; 
     char surprise; 
     char sadness; 
     char disgust; 
     char anger; 
     char anticipation; 
     char love; 
    } emo; 
}; 

/* human.h */ 
class Human : public Creature { 

}; 
1

Creature::emotion est un type, pas une variable. Vous faites l'équivalent de foo->int = 5; mais avec votre propre type. Modifiez votre définition struct à cela et votre code fonctionnera:

struct emotion_t { // changed type to emotion_t 
     // ... 
    } emotion;  // declaring member called 'emotion' 
Questions connexes