派生类的前向声明
Forward declaration of derived class
我有一些这样的代码:
class Class1 {
// some code here
Class2 inverse() {
// some code here
}
};
class Class2 : public Class1 {
// some code here
};
我得到一个错误,Class2
在函数inverse
中是未知的。我可以声明这个类吗?如何声明?
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();
}
但是,老实说,这是糟糕的设计。
到达Class2 inverse()
时没有定义Class2
,所以即使前向声明也不能完全解决这个问题。然而,你可以做两件事。返回指向Class2
class Class2;
^^^^^^^^^^^^
class Class1 {
Class2& inverse() {
// ^^^ or possibly Class2*
//
}
};
class Class2: public Class1 {
}
或者在Class2
完全定义之后定义inverse
class Class2;
class Class1 {
Class2 inverse();
};
class Class2: public Class1 {
//
}
Class2 Class1::inverse() {
//
}
如果可能的话,我会选择第二个选项。
相关文章:
- 具有多个类、派生类的C++正向声明
- 是否可以使用 using 将基类中的公共成员重新声明为派生类中的私有成员?
- 基类可以声明虚拟方法但不定义它吗?仍然在派生类中定义
- 将派生类的构造函数声明为父类的友元
- 从模板基类派生是否在派生类声明的点实例化模板
- 从基类的唯一指针中声明派生类的类型
- C++ 多态性:如果派生类中的虚函数在基类中声明了常量,是否需要将其声明为常量
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 如何声明从 QApplication 派生的 Qt 类并覆盖通知函数?
- 是否可以在引用另一个派生类的派生类中声明复制构造函数?
- 冲突的声明(外部基础与派生)
- 声明派生类的对象而不指定它
- 通过派生类模板参数指定基类模板参数之一。如何使用基类的 using 声明
- 声明嵌套基模板类实例是派生类的好友
- 是否可以在C++中声明基类,以便只能通过创建函数创建从它派生的类
- 在基类中使用派生类,而在基类之后声明派生类
- 显式声明派生类中所需的析构函数
- 在IF中声明派生类以供外部使用
- C++在if-else内部声明派生类对象,并在外部使用它
- 从模板前向声明派生类