Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除指向不完整类型的指针_C++ - Fatal编程技术网

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在您的问题中提供一个,再现这种情况。可能有更多的潜在问题需要考虑,比如循环报头等,但是源文件和编译器中的强制必须看到它,因为我包含了头文件和源文件,这个头也包括在内。@德米特里在你的问题中提供了一个,然后再现了情况。可能会考虑更多的潜在问题,比如循环报头等。