invalid initialization of non-
时间: 2023-04-25 15:06:15 浏览: 115
const reference of type ‘int&’ from a temporary of type ‘int’
这个错误消息表明你在尝试将一个临时的 int 类型的值赋值给一个非常量 int& 类型的引用,这是不被允许的。因为临时变量在赋值后会立即被销毁,而引用需要指向一个持久的变量。
相关问题
[Error] invalid initialization of non-const reference of type 'SqStack&' from an rvalue of type 'SqStack*'
这个错误信息是在C++编程中遇到的问题,它发生在试图初始化非常量引用(non-const reference)`SqStack&`,但是传递给它的是一个右值(rvalue),即临时的对象或者是已经初始化过的对象的别名,如指针`SqStack*`。
`SqStack&`是一个引用,需要直接引用已存在的栈对象,而`SqStack*`是一个指向栈对象的指针,通过解引用才能得到实际的对象。当试图从指针创建引用时,由于指针本身不是对象,所以会引发“invalid initialization”这样的错误,因为不能将一个临时的对象赋给引用。
解决这个问题通常有两种方式:
1. 如果你知道你要引用的具体栈对象,可以先将其转换为引用:
```cpp
SqStack stack; // 或者从别的地方获取一个堆栈对象
SqStack& ref = *stack; // 现在ref是一个对堆栈的引用
```
2. 如果你在函数参数传递上遇到这个问题,可能是预期接受引用作为参数,而不是指针,确保传递的是栈对象的引用:
```cpp
void function(SqStack& stack) { ... } // 函数期望一个引用作为输入
function(*someStack); // 这里someStack应该是已经初始化的栈对象
```
[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; // 现在可以安全地初始化引用
```
阅读全文