前向声明和继承

Forward declaration and inheritance

本文关键字:继承 声明      更新时间:2023-10-16

下面的代码在getFoo函数中产生了一个错误,因为MockFoo还没有被定义为继承自IFoo。我该如何解决这个问题?最简单的方法是将_foo的类型更改为IFooPtr。但如果可能的话,我宁愿不做这个改变。我不能改变类的定义顺序。

class MockFoo;
typedef boost::shared_ptr<MockFoo> MockFooPtr;
class MockBar: public IBar
{
    virtual IStructPtr getFoo() const {
        return _foo;
    }
    ...
    MockFooPtr _foo;
};
class MockFoo: public IFoo
{
    ...
};

如果我是你,我会声明typepedef为:

typedef boost::shared_ptr<IFoo> IFooPtr;

这对我来说更自然,避免了你正在经历的问题——这是你自己想出的解决方案。