我在虚拟析构函数中获得undefined reference to 'operator delete(void*, unsigned int)'
。
26: virtual ~ADC() = default;
21: virtual ~FPGA() = default;
25: virtual ~Emitter() = default;
40: virtual ~Object() = default;
ADC,FPGA,发射器和继承自DMA :: Object。 DMA是命名空间。
此代码使用GCC 4.9编译,但在将工具切换到GCC 5.4.1时开始失败。
这是一个嵌入式系统,我没有使用动态内存分配,虽然我确实使用了新的根容器对象。
我突然意识到#include <new>
可能会作为cppreference suggests that it is defined here提供帮助,但这不起作用。
这些都不是虚拟的,但是我想了解为什么当我不在这些类上直接使用new时调用delete。此外,它表明实际的析构函数本身缺少删除,而这些析构函数本身并不知道它是如何分配的。
如果有人可以了解这些规模的删除操作符,我也很感激。
这是使用std=c++14
编译的最小示例:
class A
{
public:
A() = default;
virtual ~A() = default;
};
class B : public A
{
public:
B() = default;
virtual ~B() = default;
};
int main(void)
{
static B b;
}
> Building ‘Verify’ from solution ‘Louise’ in configuration ‘Debug’ 1>
> Compiling ‘Verify.cpp’ 1> Linking Verify.elf 1> Output/Verify
> Debug/Obj/Verify.o: In function `A::~A()': 1>
> /Volumes/Development/louise/Verify.cpp:7: undefined reference to
> `operator delete(void*, unsigned int)' 1> Output/Verify
> Debug/Obj/Verify.o: In function `A::~A()': 1>
> /Volumes/Development/louise/Verify.cpp:7: undefined reference to
> `operator delete(void*, unsigned int)' 1> Output/Verify
> Debug/Obj/Verify.o: In function `B::~B()': 1>
> /Volumes/Development/louise/Verify.cpp:16: undefined reference to
> `operator delete(void*, unsigned int)' 1> Output/Verify
> Debug/Obj/Verify.o: In function `B::~B()': 1>
> /Volumes/Development/louise/Verify.cpp:16: undefined reference to
> `operator delete(void*, unsigned int)' Build failed