我在删除称为tree2的私有成员类时遇到错误,我尝试使用"**","&*","*&",但是我一直在出错后不断出错。头文件:class tree1{ private: class tree2 { tree2*child; tree2**child2; int data; }; void clear( tree2** the_root); tree2* root;};我是在其中放置了clear函数的人,所以我进入.cpp文件并以这种方式实现它:void tree1::clear(tree2** TheRoot){ if(*TheRoot == NULL) { return; } clear(&(*TheRoot->child1)); clear(&(*TheRoot->child2)); delete TheRoot; TheRoot = NULL;}然后在使用clear的函数中,我将其称为clear(root)或clear(&root)或clear(*root)或clear(&*root)。所有组合均失败,我不断出错。删除此类的正确方法是什么? 最佳答案 看来您希望删除后的root -Pointer是NULL。这就是为什么仅将tree2*作为参数传递而tree2**是必需的原因。delete TheRoot;行不会删除root,而是删除指向root的指针(在您的示例中不是通过new分配的,因此会引起一些隐藏的错误。下一行中也存在同样的问题。您可以通过编写。但是由于您使用的是C ++,因此可以像这样传递delete *TheRoot; *TheRoot = NULL;:void tree1::clear(tree2*& TheRoot){ if (TheRoot == NULL) { return; } clear(TheRoot->child1); clear(TheRoot->child2); delete TheRoot; TheRoot = NULL;}并像tree2*&这样称呼它
07-24 09:27