0

这些是我班级的属性:

    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*as 方法的返回值显示“不允许使用标识符”和“声明与...不兼容”。

.cpp 文件:

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

3 回答 3

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)
{

}

因为编译器看到的是 typeAddition_Struct::a而不是 type a

于 2013-04-14T09:03:59.267 回答
1

在课堂上,您可以使用a. 从类外部使用完全限定名称Addition_Struct::a

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

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

没有 typedef。

于 2013-04-14T09:05:28.900 回答
0

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

a a_data;
b b_data;
outcome outcome_data;

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

this->a_data;
this->b_data;
this->outcome_data;
于 2013-04-14T09:01:44.767 回答