2013-04-24 3 views
0

Следующий код генерирует ошибку в функции 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 
{ 
    ... 
}; 
+0

Вы можете переместить определение функции 'getFoo' после определения класса' MockFoo'? (или еще лучше в другой исходный файл .cpp) –

+0

Я предполагаю, что после заполнения деталей невозможно просто полностью объявить 'MockFoo' перед' MockBar', как это было бы возможно в этом примере, правильно? –

+0

@Euro Micelli Правильно! – Baz

ответ

0

Если бы я тебя, я бы объявить ЬурейеЕ как:.

typedef boost::shared_ptr<IFoo> IFooPtr; 

Это чувствует себя более естественно для меня и избегает проблемы вы испытываете - и это решение, которое вы придумали сами.

+0

У меня уже есть этот typedef, где я определяю свои интерфейсы. Я все равно буду вынужден изменить тип _foo, который я не хочу делать. Вместо этого я хотел бы, чтобы _foo оставался как MockFooPtr, где MockFoo наследуется от IFoo. – Baz

Смежные вопросы