二进制搜索树例程无法使用指针参数编译 P>新的C++,我想在几天内为一个项目写一个二进制堆计算器。在进入二进制堆之前,我想编写一个二叉树结构作为堆的超类

二进制搜索树例程无法使用指针参数编译 P>新的C++,我想在几天内为一个项目写一个二进制堆计算器。在进入二进制堆之前,我想编写一个二叉树结构作为堆的超类,c++,pointers,C++,Pointers,我仍在试图将我的头脑集中在指针与引用之间,以及在分配任务时每个指针都是什么样子,以及什么时候应该将某些东西定义为指针或引用 无论如何,这里有一些我很好奇的代码: #include "BinaryTree.h" int main(void){ BinaryTree tempTree = new BinaryTree(); BinaryNode* ptrToRoot; ptrToRoot = tempTree.getRootNode(); int inputAr

我仍在试图将我的头脑集中在指针与引用之间,以及在分配任务时每个指针都是什么样子,以及什么时候应该将某些东西定义为指针或引用

无论如何,这里有一些我很好奇的代码:

#include "BinaryTree.h"

int main(void){

    BinaryTree tempTree = new BinaryTree();
    BinaryNode* ptrToRoot;
    ptrToRoot = tempTree.getRootNode();

    int inputArr = { 5, 2, 7, 10, 11, 20, 1};

    for(int i = 0; i < sizeof(inputArr) / sizeof(inputArr[0]); i++){
            tempTree.binaryTreeInsert(ptrToRoot, inputArr[i]);
    }

    tempTree.inOrderPrint(ptrToRoot);
}

这可能至少是您问题的一部分:

BinaryTree tempTree = new BinaryTree();
这行不正确
new
用于执行堆分配,并返回指向新分配对象的指针。但是,对象是在堆栈上分配的

尝试将此更改为:

BinaryTree tempTree;

这将使用无参数构造函数在堆栈上构造一个新对象。这可能会解决您的问题,因为编译器可能会混淆此变量的类型。

是否应
getRootNode
不返回
&rootNode
?或者您的成员
rootNode
是指针?在BinaryNode.h中,您的getRootNode()应该返回BinaryNode*,但rootNode是BinaryNode;应该是int-inputArr[]={5,2,7,10,11,20,1};注意指针,BinaryTree和BinaryTree*是不同的类型。我建议你从谷歌搜索“c++指针参考值教程”之类的东西开始,并尝试一些小的测试程序。你真的需要和这些东西保持亲密关系,否则C++会成为无尽的神秘编译错误(最好的例子)和崩溃程序(当你设法愚弄编译器)的来源。这将有助于从较小的代码开始。在C++中,当你有多个错误,它们都相互作用时,事情就变得非常困难,你试图修复一个错误,然后出现其他错误。您永远无法确定所修复的是真正的错误还是代码中其他地方的不同错误的结果。这就是现在发生在你身上的事情。写十行程序,让它们工作,然后从那里开始构建。啊,我一定错过了。非常感谢。但是,我仍然有相同的错误。它不应该是:BinaryTree*Denterree吗?@Sarang否,因为没有相应的
delete
。但是,如果添加了
delete
,那么这也是可以接受的答案。但是,我更喜欢在可能的情况下使用堆栈分配的对象,因为如果抛出异常,就不可能泄漏对象。
BinaryTree tempTree;