我知道我可以按如下方式转发声明一个类:
class Foo;
// ... now I can use Foo*
但是,我可以这样做:
class Bar {
public:
virtual void someFunc();
};
// ... somehow forward declare Class Foo as : public Bar here
someFunc(Foo* foo) {
foo -> someFunc();
}
class Foo: public Bar {
}
谢谢!
答案 0 :(得分:4)
您可以将声明栏转发为class Bar;
并更改someFunc
的签名,以Bar*
作为参数。由于someFunc()
是基类中的虚方法,因此它应该可以工作。
答案 1 :(得分:1)
在您的前瞻性声明Foo
成为不完整类型之后,在您提供Foo
的定义之前,它将保持不完整。
虽然Foo
不完整,但任何取消引用Foo
指针的尝试都是不正确的。所以要写
foo->someFunc();
您需要提供Foo
的定义。