error: invalid initialization of non-const reference of type 'AdaptDrawBoard::ShowBoardParam&' from an rvalue of type 'AdaptDrawBoard::ShowBoardParam' int retStart = AdaptDrawBoard::AdaptDrawBoardApi::GetInstance()->ShowDrawBoard(getShowBoardParam(bLocalInitiation, bTransparent, objBoardBasicInfo)); ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
时间: 2023-06-28 13:15:53 浏览: 142
这个错误发生在试图将一个临时对象传递给一个非 const 引用参数时。在你的代码中,getShowBoardParam() 函数返回一个 AdaptDrawBoard::ShowBoardParam 类型的临时对象,而该对象作为参数传递给 AdaptDrawBoard::AdaptDrawBoardApi::GetInstance()->ShowDrawBoard() 函数。但是,ShowDrawBoard() 函数期望一个非 const 引用类型的参数,这意味着它希望得到一个可修改的对象的引用,而临时对象是不可修改的。因此,编译器会报上述错误。
要解决这个问题,你可以将 ShowDrawBoard() 函数的参数类型改为 const 引用类型。这样,它就可以接受一个临时对象了。或者,你可以将临时对象存储在一个变量中,然后将该变量传递给 ShowDrawBoard() 函数。例如:
```
AdaptDrawBoard::ShowBoardParam showBoardParam = getShowBoardParam(bLocalInitiation, bTransparent, objBoardBasicInfo);
int retStart = AdaptDrawBoard::AdaptDrawBoardApi::GetInstance()->ShowDrawBoard(showBoardParam);
```
这样,你就可以将 showBoardParam 对象作为参数传递给 ShowDrawBoard() 函数,并且不会触发上述错误。
相关问题
E:\al\studentManager\mainwindow.h:35: error: invalid initialization of non-const reference of type 'QString&' from an rvalue of type 'QString' QString& data="2021111111"; ^
这个错误是因为在声明一个带有引用类型参数的函数时,你试图将一个字符串字面量直接赋值给这个引用类型参数。引用类型参数必须被初始化为一个对象,而字符串字面量并不是一个对象,因此不能直接赋值给一个引用类型参数。
如果你想在函数中使用一个默认值,你可以使用一个 `QString` 类型的对象来初始化这个参数。例如:
```cpp
void mySlot(QString& data = QString("2021111111"));
```
在上面的代码中,我们使用了一个 `QString` 类型的对象 `"2021111111"` 来初始化参数 `data`。注意,我们使用了 `QString("2021111111")` 来创建一个 `QString` 类型的对象,并将其作为参数 `data` 的初始值。这样,在函数中,我们就可以使用 `data` 引用来访问这个字符串对象。
如果你不需要使用引用类型参数,你可以将这个参数改为 `QString` 类型的值传递。例如:
```cpp
void mySlot(QString data = "2021111111");
```
在上面的代码中,我们将参数 `data` 的类型改为 `QString` 类型,并使用一个字符串字面量 "2021111111" 来初始化这个参数的默认值。这样,在函数中,我们就可以直接访问参数 `data` 的值,而不必使用引用类型。
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 }); ^
这个错误的原因是函数的参数是非常量引用(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});
```
阅读全文