Еще один динамический класс не работает с "недопустимым целевым типом"

Я что-то упустил...

У меня есть класс 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.

Другие вопросы по тегам