error: invalid initialization of non-const reference of type 'uint& {aka unsigned int&}' from an rvalue of type 'uint {aka unsigned int}' bool init(uint& iMonitorIndex = 0, RECT& Rect = { 0,0,0,0 }); ^
时间: 2024-01-13 20:03:31 浏览: 196
这个错误的原因是函数的参数是非常量引用(non-const reference),而你传递的是一个右值(rvalue)。右值是指临时对象或字面量,它们不能被修改,因此不能被传递给非常量引用。
你需要将参数改为常量引用(const reference)或传递一个具有名称的变量作为参数,因为可以将具有名称的变量作为左值(lvalue)传递给非常量引用。
例如,你可以这样调用该函数:
```
uint iMonitorIndex = 0;
RECT rect = {0, 0, 0, 0};
init(iMonitorIndex, rect);
```
或者将参数改为常量引用:
```
bool init(const uint& iMonitorIndex = 0, const RECT& Rect = {0, 0, 0, 0});
```
相关问题
[Error] invalid initialization of non-const reference of type 'LinkQueue&' from an rvalue of type 'LinkQueue*'
这个错误信息 "Error: invalid initialization of non-const reference of type 'LinkQueue&' from an rvalue of type 'LinkQueue*'" 出现在 C++ 编程中,意味着你在尝试初始化一个引用(reference)时遇到了问题。`LinkQueue&` 表示对 LinkQueue 类型的引用,而 `LinkQueue*` 是指向 LinkQueue 的指针。
C++ 中,引用必须绑定到某个已存在的对象上,而不能直接从指针创建引用。当你试图从一个指针(可以看作临时的对象)去初始化引用时,因为指针不是具体的对象实例,所以会导致这样的错误。
例如,下面的代码可能会引发此类错误:
```cpp
LinkQueue* pq = new LinkQueue(); // 创建一个指针
LinkQueue& ref = *pq; // 错误:不能从指针创建引用,应该解引用后再初始化引用
```
正确的做法应该是先将指针解引用,再用解引用后的对象来初始化引用:
```cpp
LinkQueue* pq = new LinkQueue(); // 创建一个指针
LinkQueue tmp = *pq; // 先复制指向的对象
LinkQueue& ref = tmp; // 现在可以安全地初始化引用
```
error: invalid initialization of non-const reference of type 'std::__cxx11::string& {aka std::__cxx11::basic_string<char>&}' from an rvalue of type 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' m_pMessageControl->sendIM(imInfo, std::string()); ^~~~~~~~
这个错误是因为你传递了一个临时字符串对象(rvalue)给函数中的非常量引用参数。非常量引用参数只能绑定到具有持久性的对象,而临时对象是不具有持久性的,因此编译器会报错。
为了解决这个问题,你可以将非常量引用参数改为常量引用参数,或者传递一个具有持久性的字符串对象。如果你想使用临时对象,可以将它作为函数的参数,而不是作为参数的引用。
例如,将函数声明改为以下形式之一:
```
void sendIM(IMInfo& imInfo, const std::string& message);
void sendIM(IMInfo& imInfo, std::string message);
```
或者将函数调用改为以下形式之一:
```
m_pMessageControl->sendIM(imInfo, std::string(""));
m_pMessageControl->sendIM(imInfo, "Hello, world!");
```
阅读全文