cannot bind non-const lvalue reference of type ‘QDomElement&’ to an rvalue of type ‘QDomElement’

/mnt/hgfs/SharedFolders/KingKongNano/YiKingStudio/TopoConfig/topoconfigwindow.cpp:2079: error: cannot bind non-const lvalue reference of type ‘QDomElement&’ to an rvalue of type ‘QDomElement’
FreshPdoandVarIndex(TopologyVarFileDocDemo->documentElement());
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~

这个错误的意思

这个错误是指不能将一个非常量左值引用绑定到一个右值上。

那什么是左值右值?

简单理解,能够放在=左边的称为左值,不能放在=左边,只能放在右边的为右值。
例如:int a = 3; 变量a为左值,3为右值,通常右值为一些临时变量,比如函数返回值。

理解了右值,这个错误就很好理解了。

 void FreshPdoandVarIndex(QDomElement &root);  ---------->>>>>>>>> void FreshPdoandVarIndex(const QDomElement &root);
FreshPdoandVarIndex(TopologyVarFileDocDemo->documentElement());
->    QDomDocument * TopologyVarFileDocDemo = new QDomDocument();
   ->QDomElement documentElement() const;

常见报错的情况

通常,我们函数参数传递时,采用引用传递常常会遇到这个错误

#include <iostream>

using namespace std;

int add(int &num1, int &num2) {
    return num1 + num2;
}

int main() {
    cout << add(3, 3) << endl;  //这里3是右值,不能绑定到左值引用上
    return 0;
}
//报错:error: cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'

  上面报错是因为参数3是右值,不能绑定到形参num1和num2左值引用上,所以如果我们不需要改变实参的值,又需要用引用传递参数,建议要把引用定义为常量引用,如下就不会报错了:

#include <iostream>

using namespace std;

int add(const int &num1, const int &num2) {
    return num1 + num2;
}

int main() {
    cout << add(3, 3) << endl; 
    return 0;
}

 

posted @ 2024-10-22 17:19  yyfaaa  阅读(20)  评论(0编辑  收藏  举报