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为右值,通常右值为一些临时变量,比如函数返回值。
理解了右值,这个错误就很好理解了。
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; }