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 20:15:53 浏览: 149
这个错误发生在试图将一个临时对象传递给一个非 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() 函数,并且不会触发上述错误。
相关问题
[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; // 现在可以安全地初始化引用
```
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` 的值,而不必使用引用类型。
阅读全文