Еще один динамический класс не работает с "недопустимым целевым типом"
Я что-то упустил...
У меня есть класс SocketComm
, У меня есть производный класс SocketTCP : public SocketComm
,
SocketComm
имеет следующее:
static SocketComm *Instance; // static pointer to the singleton instance du jour
Я пытаюсь определить метод в SocketComm
следующее:
static inline SocketTCP *GetTCPclass()
{
// consistent method to return a SocketTCP* cast of SocketComm::Instance (or NULL)
SocketTCP *s = dynamic_cast<SocketTCP *>(Instance);
assert( s != NULL );
return s;
}
Я получаю (VS 2010)
ошибка C2680: "SocketTCP *": недопустимый тип цели для dynamic_cast
Что мне не хватает? SocketComm
абстрактно - это проблема?
2 ответа
Кажется, ответ таков: dynamic_cast нуждается в полном объявлении целевого класса.
Смотрите мой комментарий выше.
Да, как говорит @ViRusTriNiTy, я полагаю, я мог бы поместить его в SocketTCP как статический встроенный. Это, вероятно, тоже сработало бы. Но мне кажется более логичным в базовом классе, и нет никаких причин, чтобы сделать его встроенным. Компилятор встроит его, когда сможет (в SocketComm.cpp) в любом случае.
Согласно вашим комментариям вы смешиваете код, принадлежащий производному классу, в базовый класс. Это неправильный подход, и теперь вы понимаете, почему: SocketTCP' : class must be defined before using in a dynamic_cast.
Просто подойдите к этому по-другому, например, добавив отдельный вспомогательный класс, который выполняет dynamic_cast.