Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamic 另一个动态的“U类”失败了;无效的目标类型";_Dynamic_Casting - Fatal编程技术网

Dynamic 另一个动态的“U类”失败了;无效的目标类型";

Dynamic 另一个动态的“U类”失败了;无效的目标类型";,dynamic,casting,Dynamic,Casting,我错过了一些东西 我有一个类SocketComm。我有一个派生类SocketTCP:public-SocketComm SocketComm中包含以下内容: static SocketComm *Instance; // static pointer to the singleton instance du jour 我试图在SocketComm中定义一个方法,如下所示: static inline SocketTCP *GetTCPclass() { // consistent me

我错过了一些东西

我有一个类
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;
}
静态内联SocketTCP*gettcpglass()
{
//返回SocketComm::Instance(或NULL)的SocketTCP*强制转换的一致方法
SocketTCP*s=动态_转换(实例);
断言(s!=NULL);
返回s;
}
我得到了(VS2010)

错误C2680:“SocketTCP*”:动态_转换的目标类型无效


我错过了什么
SocketComm
是抽象的——这就是问题所在吗?

根据您的评论,您正在将属于派生类的代码混合到基类中。这是错误的方法,您现在可以看到原因:
SocketTCP':在动态转换中使用之前必须定义类。


只需以另一种方式处理这个问题,比如说添加一个单独的helper类来执行动态\u cast。

答案似乎是动态\u cast需要一个完整的目标类声明

见我上面的评论


是的,就像@virustinity所说的,我想我可以把它作为静态内联放到SocketTCP中。这可能也会奏效。但对我来说,在基类中它似乎更符合逻辑,并且没有性能理由让它内联。编译器会在可以的时候(在SocketComm.cpp中)内联它。

你能发布一个我们可以尝试编译的最小可行代码吗?我现在看到更多错误消息(在输出面板中,而不是错误面板中,这就是我错过它的原因)。“'SocketTCP':在动态_转换中使用之前必须定义类。”我尝试将前向声明类SocketTCP添加到SocketComm,但没有帮助。我想我必须将GetTCPclass()从头部移动到实现,并确保定义了SocketTCP(#include SocketTCP.h)。“我还没有机会尝试。”查尔斯我根据你的评论编辑了我的答案。不是真的。我把它忘在SocketComm里了。我刚刚去掉了内联,做了一个“正常”的实现(在一个带有#include“SocketTCP.h”的.cpp中),一切都很好。