2012-11-02 2 views
0

Можно создать дубликат:
The type in a dynamic_cast must be a pointer or reference to a complete class type, or void *вперед объявить абстрактный класс из другого пространства имен

у меня есть пространство имен Fuzzy и имеет абстрактный класс CuteDog (который наследуется от другого абстрактный класс).

Я пишу новый класс PuppyArmy

Я хотел бы иметь указатель на CuteDog в PuppyArmy и в моем файле заголовка я пытаюсь это.

namespace Fuzzy { class CuteDog } 

using namespace Fuzzy; 

class PuppyArmy { 
    ... 
    CuteDog *cute; 
} 

тогда, когда в моем файле CPP я получил это

using namespace Tough; 

.... 
cute = dynamic_cast<::Fuzzy::CuteDog*>(foo()); // where foo() returns the parent class of CuteDog* 

Компилятор говорит мне

C2440: '=' : cannot convert from Fuzzy::CuteDog * to PuppyArmy::Fuzzy::CuteDog * 

Любые указатели на то, что я делаю неправильно здесь?

+1

Попробуйте изменить 'dynamic_cast <:: Fuzzy..' в' dynamic_cast <:: Fuzzy ... ', потому что мой компилятор считает, что '<:' является началом триграфа/орграфа. – 0x499602D2

+0

Как только я исправил ошибки транскрипции, он [отлично работает] (http://ideone.com/qP50mX) для меня. Я думаю, вы, может быть, не сказали нам что-то. Пожалуйста, отправьте короткую полную программу, демонстрирующую вашу ошибку. http://SSCCE.ORG/ –

ответ

1

Похоже, которого не включаемый файл заголовок, в котором вы определяете CuteDog реализация

+0

CuteDog является частью API, который мы используем, но не имеет доступа к источнику. – Boumbles

0

В случае кто-то привести здесь по названию. Это как вперед объявить класс (абстрактный или нет) из другого пространства имен:

namespace different { 
    class SomeClass; 
} 
Смежные вопросы