gpt4 book ai didi

c++ - 指针返回值地址

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:55 24 4
gpt4 key购买 nike

我有以下.h文件

class Node
{
private :
int m_data;
Node* m_left;
Node* m_right;
public:
Node(int data) : m_data(data), m_left(nullptr), m_right(nullptr) {}
Node* getLeft() { return m_left; }
Node* getRight() { return m_right; }
int getData() { return m_data; }
};

class Tree
{
private :
Node * m_root;
unsigned int m_size;
void freeNode(Node*);
bool insert(Node**, int );
public:
Tree() : m_size(0) {}
~Tree();
int findMaximumVericalSum();
bool insert(int);
};

实现,我得到一个错误 - 哪里出了问题,我应该如何解决它

'&' requires l-value

The address-of operator ( & ) must have an l-value as operand.

bool Tree::insert(Node** root, int data)
{
Node* newNode = new Node(data);
if (*root == nullptr) {
*root = new Node(data);
}
else if (data < (*root)->getLeft()->getData())
{
// error '&' requires l-value
insert(&((*root)->getLeft()), data);
}
else if (data > (*root)->getLeft()->getData())
{

}
}

最佳答案

令我惊讶的是,我无法找到所问问题的良好拷贝(尽管有其他问题)。

您看到的错误来自以下一段代码:

&((*root)->getLeft())

并且可以大大简化为以下非常小的部分:

int bar();
void foo(int*);

void baz() {
foo(&bar());
}

(也可以在https://gcc.godbolt.org/z/PuwtuT上看到)

这会产生完全相同的编译器错误。这样做的原因是 C++ 禁止获取纯右值的地址,虽然整个右值/左值的讨论非常复杂,但很容易记住,当函数返回一个值时,它总是一个纯右值。 (如果函数返回引用,则另当别论)。但是,您可以通过 const 或右值引用传递右值。

我不能立即为您的问题提供解决方案,因为我不是很清楚您的最终目标是什么。但我确实希望这个答案至少可以引导您的思路,让您提出另一个问题。

关于c++ - 指针返回值地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56446884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com