undefined reference to `typeinfo for DeviceAllocator‘
出现“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;
};
解决 --
主要原因
-
虚函数未实现
声明了虚函数但未定义实现(非纯虚函数)。例如:class Base {
public:
virtual void foo(); // 未实现
};解决:实现虚函数或改为纯虚函数(
virtual void foo() = 0;
) -
缺少虚析构函数
多态基类未声明虚析构函数:class Base {
public:
// 未声明虚析构函数
};
解决方案
-
检查虚函数实现
- 确保所有非纯虚函数有定义。
- 纯虚函数需明确标记
= 0
:class Base {
public:
virtual void foo() = 0; // 正确声明纯虚函数
};
-
添加虚析构函数
为多态基类声明虚析构函数:class Base {
public:
virtual ~Base() = default;
};