类中的公共结构

时间:2010-05-30 13:12:56

标签: c++ class struct

我是C ++的新手,让我说我有两个课程:CreatureHuman

/* 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 {

};

我在main.cpp的主要功能中有这个:

Human foo;

我的问题是:如何设定foo的情绪?我试过这个:

foo->emotion.fear = 5;

但是GCC给了我这个编译错误:

  

错误:' - >'的基本操作数有非指针类型'人'

此:

foo.emotion.fear = 5;

给出:

  

错误:'struct Creature :: emotion'无法访问   错误:在此背景下   错误:无效使用'struct Creature :: emotion'

任何人都可以帮助我吗?感谢


P.S。不,我没有忘记#include s

4 个答案:

答案 0 :(得分:12)

没有emotion类型的变量。如果您在班级定义中添加emotion emo;,则可以根据需要访问foo.emo.fear

答案 1 :(得分:7)

 class Human : public Creature {

C ++默认为class es。

的私有继承

答案 2 :(得分:3)

将继承更改为public并在Creature类(例如emo)中定义struct情感成员。

因此,您可以实例化Human类的对象(例如foo)并将值赋予其成员,如

foo.emo.fear = 5;

foo->emo.fear = 5;

代码已更改:

/* 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 {

};

答案 3 :(得分:1)

Creature::emotion是一种类型,而不是变量。你做的是等同于foo->int = 5;但你自己的类型。将您的结构定义更改为此,您的代码将起作用:

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