【发布时间】:2011-10-24 07:46:01
【问题描述】:
我是 C++ 编程的新手,但从事 C 和 Java 方面的工作已经很长时间了。我正在尝试在我正在处理的一些串行协议中做一个类似接口的层次结构,并不断收到错误:
Undefined reference to 'operator delete(void*)'
(简化的)代码如下:
PacketWriter.h:
class PacketWriter {
public:
virtual ~PacketWriter() {}
virtual uint8_t nextByte() = 0;
}
StringWriter.h:
class StringWriter : public PacketWriter {
public:
StringWriter(const char* message);
virtual uint8_t nextByte();
}
构造函数和 nextByte 函数在 StringWriter.cpp 中实现,但仅此而已。我需要能够从指向 PacketWriter 的指针中删除 StringWriter,如果我为 StringWriter 定义了一个析构函数,无论是否虚拟,我都会遇到各种其他类似的错误。我确信这是一个我作为新手忽略的简单问题。
另外,我正在为 AVR 芯片编写此代码,在 Windows 上使用 avr-g++。
谢谢
【问题讨论】:
-
如何运行编译器?如果你使用
avr-gcc或类似的东西,那么你应该使用avr-g++或类似的东西。 -
你是否以一种特殊的方式链接这个?如果您链接到通常的运行时,则提供了
operator new和operator delete的实现,但如果您做一些无鞍的事情,您可能需要自己定义这些。 -
如果您没有将 C++ 标准库链接到最终的可执行文件中,则会出现此错误。你把这个链接进去了吗?
-
我很确定 new/delete 没有被实现,并且有充分的理由,它是一个嵌入式系统。正确阅读文档。
-
@hexa:很好的收获:nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus。您可能可以将此作为答案发布
标签: c++ embedded destructor avr avr-gcc