C++ 删除指向不完整类型的指针
我试图删除我的结构C++ 删除指向不完整类型的指针,c++,C++,我试图删除我的结构 delete it; 并得到通知,这种类型是不完整的 警告: C4150:删除指向不完整类型“It”的指针;没有调用析构函数 我必须在头文件中使用转发声明 好的,我认为,使用迭代器在同一个文件中创建delete函数是正确的方法 void deleteIterator(It* it) { delete it; } 只要从任何地方打电话 deleteIterator(it) 调用delete需要完整声明地址类型1。将该代码移出到翻译单元,该单元可以看到it类型的完整
delete it;
并得到通知,这种类型是不完整的
警告:
C4150:删除指向不完整类型“It”的指针;没有调用析构函数
我必须在头文件中使用转发声明
好的,我认为,使用迭代器在同一个文件中创建delete函数是正确的方法
void deleteIterator(It* it)
{
delete it;
}
只要从任何地方打电话
deleteIterator(it)
调用
delete
需要完整声明地址类型1。将该代码移出到翻译单元,该单元可以看到it
类型的完整声明
1) 想想如果
typeof(it)
声明了virtual
析构函数,或者没有声明,它会有什么不同。调用delete
需要完整声明寻址的type1。将该代码移出到翻译单元,该单元可以看到it
类型的完整声明
1) 想想如果
typeof(it)
声明了virtual
析构函数,或者没有声明,它会有什么不同。我必须在头文件中使用前向声明,然后你就不能删除了。但是你也不能新建。这意味着编译器没有看到你的类的完整定义。提前声明是不够的。什么?我正在使用函数It*It=begin(matrix)创建新实例;begin是具有结构的同一文件中的实现。我需要创建我的delete函数并调用它的函数?迭代器永远不会分配给空闲存储。你的建筑是垃圾,为什么?不应该吗?我必须在头文件中使用转发声明,然后您不能删除。但是你也不能新建。这意味着编译器没有看到你的类的完整定义。提前声明是不够的。什么?我正在使用函数It*It=begin(matrix)创建新实例;begin是具有结构的同一文件中的实现。我需要创建我的delete函数并调用它的函数?迭代器永远不会分配给空闲存储。你的建筑是垃圾,为什么?它不应该?但源文件和编译器中的执行必须看到它,因为我在源文件中包括了头文件,这个头文件也包括在内。@Dmitry在您的问题中提供一个,再现这种情况。可能有更多的潜在问题需要考虑,比如循环报头等,但是源文件和编译器中的强制必须看到它,因为我包含了头文件和源文件,这个头也包括在内。@德米特里在你的问题中提供了一个,然后再现了情况。可能会考虑更多的潜在问题,比如循环报头等。