出现“undefined reference to typeinfo”链接错误的原因及解决方法如下:

class DeviceAllocator {
public:
    explicit DeviceAllocator(DeviceType device_type){};

    virtual void* allocate(size_t n) = 0;
    virtual void deallocate(void* p) = 0;
    ~DeviceAllocator() = default;
};

解决 --

主要原因

  1. ​​虚函数未实现​​
    声明了虚函数但未定义实现(非纯虚函数)。例如:

    class Base {
    public:
    virtual void foo(); // 未实现
    };

    ​​解决​​:实现虚函数或改为纯虚函数(virtual void foo() = 0;)

  2. ​​缺少虚析构函数​​
    多态基类未声明虚析构函数:

    class Base {
    public:
    // 未声明虚析构函数
    };


解决方案

  1. ​​检查虚函数实现​​

    • 确保所有非纯虚函数有定义。
    • 纯虚函数需明确标记= 0:

      class Base {
      public:
      virtual void foo() = 0; // 正确声明纯虚函数
      };

  2. ​​添加虚析构函数​​
    为多态基类声明虚析构函数:

    class Base {
    public:
    virtual ~Base() = default;
    };
    ​

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐