You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译报错:std命名空间中bad_cast未命名类型问题求助(附代码)

解决‘std::bad_cast’未命名类型的编译错误

这个编译错误的原因很直接:std::bad_cast这个异常类型是定义在<typeinfo>标准头文件里的,而你的代码中没有包含这个头,所以编译器根本不知道它是什么。

解决步骤:

  • 在代码最顶部添加<typeinfo>的包含语句即可。

修改后的完整代码:

#include <iostream>
#include <typeinfo>  // 必须包含这个头才能使用std::bad_cast
using std::cout;
using std::endl;
using std::cerr;
using std::bad_cast;

class A { public: virtual ~A() { } };
class B: public A { public: };
int main() {
    int n = 4;
    A a;
    A& base = a;
    B* ptr = dynamic_cast<B*>(&base);
    if (ptr == NULL) {
        cerr << "base is not a B";
    }
    try {
        B& derived = dynamic_cast<B&>(base);
        derived = *ptr;
    } catch (bad_cast&) {
        cerr << "base is not a B";
    }
    if (n == 3) { }
    return 0;
}

额外说明:

  • 如果你不想用using std::bad_cast;简化代码,也可以在catch块里保留std::bad_cast&的写法,只要保证<typeinfo>头被包含就没问题。
  • 为什么指针版本的dynamic_cast没报错?因为当dynamic_cast转换指针失败时,只会返回NULL,不需要依赖bad_cast类型;只有转换引用失败时才会抛出bad_cast异常,这时候才需要这个头文件的支持。

内容的提问来源于stack exchange,提问作者WantToKnowMath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:27:44