这是一个最小的例子。我有一个基类,需要了解派生类。反过来,派生类需要知道基类。那么我该如何定义它们,以使他们知道彼此的存在?
class Base {
Deriving* d;
public:
Base(Deriving* deriving) {
d = deriving;
}
void f() {
d->g();
}
};
class Deriving : public Base {
public:
Deriving() : Base(this) {}
g();
};
这是我尝试过的内容以及编译器说的内容:
首先定义
Base
会导致error: 'Deriving' does not name a type
。首先定义Deriving
会导致error: expected class-name before '{' token
。声明Base
或Deriving
的类型不完整会导致error: invalid use of incomplete type 'class X'
。我不知道还能尝试什么。任何帮助是极大的赞赏。
最佳答案
在Base中,只有函数f
需要知道类Deriving
的定义,因此请在定义Deriving
之后对其进行定义。
class Deriving;
class Base {
Deriving* d;
public:
Base(Deriving* deriving) {
d = deriving;
}
void f();
};
class Deriving : public Base {
public:
Deriving() : Base(this) {}
void g();
};
void Base::f()
{
d->g();
}
关于c++ - 具有指向派生对象的指针的基类:如何分辨彼此的存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36900580/