我有2个A和B类,简单地说:
class A {
public:
void someMethod() {
//////
B* b = new B(); //Error
}
};
class B:A{
////
};
在父类中使用子类对象我需要做什么?
答案 0 :(得分:2)
在完全定义类B
之后,您需要定义成员函数,例如:
class A {
public:
void someMethod();
};
class B: A {
////
};
void A::someMethod()
{
//////
B* b = new B(); //Error
}
int main()
{
A a;
a.someMethod();
}
如果你只使用前向声明,但成员函数的定义是在完全定义了类B
之前,那么它将无法工作,因为new B
需要B
来完全定义。
答案 1 :(得分:1)
您可以使用
B* b = new B();
仅当类B
的定义完全可见时才会显示。
在定义B
后移动函数的实现。
class A {
public:
// Declare only
void someMethod();
};
class B : A {
////
};
void A::someMethod() {
B* b = new B();
}