【发布时间】:2020-04-05 18:24:18
【问题描述】:
我正在尝试用二叉树做一些实验。我运行了以下代码:
#include<iostream>
using namespace std;
struct tree{
char data;
tree *left=NULL;
tree *right=NULL;
tree *parent=NULL;
};
tree newNode(char d)
{
struct tree node;
node.data = d;
return node;
}
int main()
{
struct tree currentNode = newNode(' ');
currentNode.left = &newNode(' ');
return 0;
}
我收到此错误:
error: taking address of temporary [-fpermissive]
currentNode.left = &newNode(' ');
是什么导致了这个错误,我该如何纠正这个错误?
【问题讨论】:
-
您必须使用
new或类似的方式分配节点。struct tree node;在您退出函数时被删除,并且您返回的副本在您调用函数的行尾(大致)被删除,因此即使编译器允许您在此处获取地址,您会得到一个悬空指针。 -
您不能将临时对象绑定到指针。对于这种 if 结构,最简单的做法是动态分配节点。另外,如果您想学习 C 语言,那很酷,但我会使用 C 编译器。学习神话般的 c/c++ 语言是一个错误。如果你真的在学习 c++,那就烧掉你正在使用的资源并找到更好的资源吧:)。
-
@HolyBlackCat 我应该在这段代码中改变什么?
标签: c++