调用函数时,引用非常量的初始值必须是左值
initial value of reference to non-const must be an lvalue when calling a function
我像这样识别二叉树:
class Btree
{
public:
BtreeNode <T>* root;
...
}
然后我在二叉树类中编写一个插入函数,如下所示:
void Btree<T>::InsertNode2(T data, BtreeNode <T>* &root)
{
if (root==NULL)
{
root = new BtreeNode <T> (data);
//cout << root->data << endl;
return ;
}
if (data <= root->data)
InsertNode2(data, root->leftchild);
else
InsertNode2(data, root->rightchild);
}
当我调用此函数时:
Btree<int> *tree=new Btree<int>();
tree->InsertNode2(1, tree->root);
没事。一切都很好。
但是如果我编写另一个函数来获取 root:
BtreeNode <T>* GetRoot(){ return this->root; }
当我调用 InsertNode2 时:
Btree<int> *tree=new Btree<int>();
tree->InsertNode2(1, tree->GetRoot());
有一个错误:引用非常量的初始值必须是左值。这两种方法有什么区别?如何修改?我希望根是私有的。
按值而不是按引用获取 BtreeNode 指针。例如
void Btree<T>::InsertNode2(T data, BtreeNode <T>* root)
这应该可以解决您的问题。
您的InsertNode2
函数是树的私有细节。您的树应具有公共插入接口,如下所示:
class Btree
{
BtreeNode <T>* root;
public:
void Insert(const T& data) { InsertNode2(data, root); }
// ...
};
当然,树根也应该是树的私人细节。
您的GetRoot
函数返回根指针的副本,当然尝试修改副本是没有意义的。您可能甚至不应该拥有GetRoot
函数,因为请参见上文。
相关文章:
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 类 Referention 中C++回调函数引用非静态函数
- 使用函数引用指向节点的指针删除链表中的节点?
- 解释通过从函数引用返回数组的语法
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 使用默认构造函数引用成员变量初始化错误
- 无法调用函数引用 c++
- 使用 decltype(this) 获取函数引用
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 从内联函数引用文件静态变量
- Boost::将sigaction函数引用绑定到实例
- 一种比函数引用更有效的方法
- 奇怪的未定义函数引用,函数调用C++不存在
- 是否可以检测绑定成员函数引用的对象是否被删除或销毁
- 构造函数引用参数导致seg错误
- 是否可以使函数模板从函数引用中获取“decltype”
- 无法让 Lua 函数引用"self"
- 如何解析变量和函数引用(Linker & Compiler)?
- 从不同模块调用函数 - 引用错误
- 如何在主函数中连接到数据库,然后从其他函数引用它