我缺少一些东西。。。
我有一节课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。