2010-01-28 78 views
0

我知道,我可以转发声明一个类,如下所示:如何转发声明一个C++类从另一个类继承?

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

为了记录,编译错误是'使用未定义类型'struct Foo''。 – 2010-02-02 10:45:03

回答

4

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

1

你向前声明Foo后成为不完全类型,这将是不完整的,直到你提供的Foo定义。 虽然Foo是不完整的任何尝试将指针取消引用到Foo是不合格的。所以要写

foo->someFunc(); 

您需要提供Foo的定义。