另一个dynamic_class失败了"无效的目标类型"

时间:2016-01-01 16:06:18

标签: dynamic casting

我错过了什么......

我有一个班级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:&#39; SocketTCP *&#39; :dynamic_cast的无效目标类型

我错过了什么? SocketComm是抽象的 - 是问题吗?

2 个答案:

答案 0 :(得分:1)

答案似乎是dynamic_cast需要完整声明目标类。

请参阅上面的评论。

是的,就像@ViRusTriNiTy所说的那样,我想我可以把它作为静态内联放在SocketTCP中。这可能也会奏效。但是在基类中我似乎更合乎逻辑,并且没有性能理由使其成为内联。无论如何,编译器都会在(可以在SocketComm.cpp中)内联它。

答案 1 :(得分:0)

根据您的评论,您将属于派生类的代码混合到基类中。这是错误的方法,你现在明白为什么:SocketTCP' : class must be defined before using in a dynamic_cast.

以不同的方式处理此问题,例如添加一个执行dynamic_cast的单独助手类。