c++ - 指针返回值地址
问题描述
我有以下 .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);
};
实施,我得到一个错误 - 什么是错的,我应该如何解决它
'&' 需要左值
地址运算符 ( & ) 必须有一个左值作为操作数。
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 或右值引用传递右值。
我不能立即为您的问题提供解决方案,因为我不太清楚您的最终目标是什么。但我确实希望这个答案至少可以引导您的想法并让您提出另一个问题。
推荐阅读
- admob - Google Ads 在 Xamarin 应用中的展示率非常低
- shortcut - Dr. Java System.out.println 快捷方式
- ios - 本地化设置不会更改 Swift 4.2 中的系统定义文本
- symfony - 如何在 findOneBy 方法中使用请求发布数据
- python - Python - 合并文件/合并文件
- node.js - 如何在 nodejs aws-sdk 模块中设置多个 aws 凭据?
- python - pytest 获取运行时函数测试变量
- sql - 计算在另一个表中找到(或未找到)具有重复值的记录中的某些字段的次数
- angular - NativeScript - 使用 RadForms 时如何检查表单的有效性?
- istio - Istio 特使代理记录丢失的文件