0

我知道我可以转发声明一个类,如下所示:

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 {
}

?

谢谢!

4

2 回答 2

4

您可以转发声明 Bar asclass Bar;并将签名更改someFunc为将 aBar*作为参数。由于someFunc()是基类中的虚拟方法,它应该可以工作。

于 2010-01-28T04:38:00.707 回答
1

在您的前向声明Foo成为不完整类型后,它将保持不完整,直到您提供Foo. 虽然Foo不完整,但任何取消引用指针的尝试Foo都是不正确的。所以写

foo->someFunc();

您需要提供Foo' 的定义。

于 2010-02-02T10:29:31.230 回答