结构作为属性

时间:2013-04-14 08:55:45

标签: c++

这是我班级的属性:

    class Addition_Struct: public Addition {
    // attributes
    struct a {
        int element;
        struct a *next;
    };
    struct b {
        int element;
        struct b *next;
    };
    struct outcome {
        int element;
        struct outcome *next;
    };
    struct a a_data;
    struct b b_data;
    struct outcome outcome_data;
// methods
a convertToStackA(int); // everything is right with this line

如何从.cpp文件中调用它们?使用this->a语法返回“不允许输入类型名称”。使用a*作为方法的返回值显示“不允许使用标识符”,并且“声明与...不兼容”。

.cpp文件:

a* Addition_Struct::convertToStackA(int number)
{
   // identifier "a" is undefined, and declaration is incompatible
}

3 个答案:

答案 0 :(得分:2)

此:

class Addition_Struct: public Addition {
// attributes
    typedef struct a {
        int element;
        struct a *next;
    } a;
};

仅定义名为Addition_Struct::a的类型。您无法使用a访问成员this-a。删除typedef以获取所需的成员。

修改

您提供的方法定义不是内联的(它在类定义之外)。因此,您必须为返回类型使用完全范围的类型名称。

Addition_Struct::a* Addition_Struct::convertToStackA(int number)
{

}

因为编译器看到类型Addition_Struct::a而不是类型a

答案 1 :(得分:1)

在课堂上你可以使用a。从课堂外部使用完全限定名称Addition_Struct::a

顺便说一句,因为这是C ++,你可以使用

struct a {
    int element;
    a *next;
};

没有typedef。

答案 2 :(得分:0)

在您的示例中,您只声明了结构,因此您的Addition_Struct定义了3个结构,但没有数据成员。你需要添加像

这样的东西
a a_data;
b b_data;
outcome outcome_data;

在结构声明之后,能够访问数据成员,如:

this->a_data;
this->b_data;
this->outcome_data;