C ++ 14未定义的运算符删除参考

时间:2016-09-07 18:37:35

标签: c++ gcc c++14

我在虚拟析构函数中获得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

0 个答案:

没有答案