另一个dynamic_class因"无效目标类型"而失败



我缺少一些东西。。。

我有一节课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是抽象的——这就是问题所在吗?

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

请参阅我上面的评论。

是的,就像@ViRusTriNiTy说的那样,我想我本可以把它作为一个静态内联放在SocketTCP中。这可能也会奏效。但对我来说,在基类中它似乎更合乎逻辑,并且没有性能方面的理由使它内联。编译器将在可以的时候(在SocketComm.cpp中)内联它。

根据您的注释,您正在将属于派生类的代码混合到基类中。这是错误的方法,现在您可以看到原因:SocketTCP' : class must be defined before using in a dynamic_cast.

只需以不同的方式来处理它,比如添加一个单独的助手类来执行dynamic_cast。

最新更新