我有一些类似的代码:
class Class1 {
// some code here
Class2 inverse() {
// some code here
}
};
class Class2 : public Class1 {
// some code here
};
我收到错误Class2
在函数inverse
中未知。我可以申报那个班级吗?
答案 0 :(得分:2)
您可以在Class2
之前转发声明Class1
。然后,您必须将inverse
函数声明与定义分开。所以你应该在定义Class2之后定义:
class Class2;
class Class1 {
// some code here
Class2 inverse();
};
class Class2: public Class1 {
// some code here
};
Class2 Class1::inverse()
{
return Class2();
}
但是,老实说,这是糟糕的设计。
答案 1 :(得分:0)
Class2
时未定义 Class2 inverse()
,因此即使向前声明也无法完全解决该问题。但是你可以做两件事。返回指针或对Class2
class Class2;
^^^^^^^^^^^^
class Class1 {
Class2& inverse() {
// ^^^ or possibly Class2*
//
}
};
class Class2: public Class1 {
}
或inverse
完全定义后定义Class2
class Class2;
class Class1 {
Class2 inverse();
};
class Class2: public Class1 {
//
}
Class2 Class1::inverse() {
//
}
如果可能,我会选择第二种选择。