我错过了什么......
我有一个班级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
是抽象的 - 是问题吗?
答案 0 :(得分:1)
答案似乎是dynamic_cast需要完整声明目标类。
请参阅上面的评论。
是的,就像@ViRusTriNiTy所说的那样,我想我可以把它作为静态内联放在SocketTCP中。这可能也会奏效。但是在基类中我似乎更合乎逻辑,并且没有性能理由使其成为内联。无论如何,编译器都会在(可以在SocketComm.cpp中)内联它。
答案 1 :(得分:0)
根据您的评论,您将属于派生类的代码混合到基类中。这是错误的方法,你现在明白为什么:SocketTCP' : class must be defined before using in a dynamic_cast.
以不同的方式处理此问题,例如添加一个执行dynamic_cast的单独助手类。