0

我有 2 个课程:DataObjectDataElement. DataObject保存指向(仅)DataElements 的指针,aDataElement包含指向多种类型的指针,其中 a DataObject.

这以前没问题,因为我只使用指向DataObjects in 的指针,所以在标头中DataElement的前向声明就足够了。DataObjectDataElement

但是,现在我尝试向 . 添加一个析构函数DataElement,其中我需要在DataObject. 对此,编译器说:

dataelement/destructor.cc: In destructor ‘DataElement::~DataElement()’:
dataelement/destructor.cc:8: warning: possible problem detected in invocation of delete operator:
dataelement/destructor.cc:8: warning: invalid use of incomplete type ‘struct DataObject’
dataelement/dataelement.h:7: warning: forward declaration of ‘struct DataObject’
dataelement/destructor.cc:8: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.

我该如何解决这个问题?前向声明显然是不够的,而我不能包含完整的标头DataObject,因为这又给了我一个循环依赖。

提前致谢!

4

2 回答 2

5

在包含两个标头的 .cpp 文件中定义析构函数。

于 2010-10-25T16:04:28.693 回答
2

在类主体之外和第二个类之后定义第一个类的析构函数,例如

class DataElement;

class DataObject
{
    DataElement* elem;
public:
    ~DataObject();
};

class DataElement
{
    DataObject* obj;
public:
    ~DataElement() { delete obj; }
};

DataObject::~DataObject()
{
    delete elem;
}
于 2010-10-25T16:15:56.900 回答