这是我班级的属性:
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
}
答案 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;