reinterpret_cast充当dynamic_cast

时间:2013-12-10 19:40:41

标签: c++ visual-c++

我的代码是这样的:

void some_func(void *source)
{
    ...
    double *casted = reinterpret_cast<double *>(source);
    ...
}

这会导致std::__non_rtti_object异常。根据堆栈跟踪,它从__RTDynamicCast引出,这是(据我所知)动态广播的MSVC实现。

这个异常应该发生在dynamic_cast中,因为指针来自外部库(可能是在没有/ GR的情况下编译),并且指向带有几个双精度的struct。但我不希望这与reinterpret_cast。它不应该只改变指针的类型,而不进行任何检查吗?

注意:

  • 我的编译器是msvc120(MS Visual Studio 2013)
  • 项目使用/ GR编译(启用运行时类型信息)
  • 指针“source”来自外部库(可能没有/ GR编译)
  • 我也尝试过使用相同结果的static_cast

2 个答案:

答案 0 :(得分:0)

非可重复的。

  

啊,我试图用所有额外的库重建整个项目   问题消失了。看起来很奇怪,因为我从未有过代码   使用dynamic_cast,所以不知道是什么造成的。我也已经   之前尝试重建该项目(没有其他dll)。   无论如何,感谢所有的帮助。    - OP

答案 1 :(得分:0)

您似乎需要在makefile中重新检查dll的构建顺序(如果使用的话)。我想你提到的外部库的来源是来自外部库的更高的&#34;更高的&#34;在构建树中,而不是代码所在的库。尝试看看你的makefile是否正常工作(可能会错过一些触发器)。