不能将类型的非常量左值引用绑定到类型的右值
cannot bind non-const lvalue reference of type to an rvalue of type
void Create_moneys(shared_ptr<CoinMoney>* &ms){
int max = getSize(true);
for(size_t i = 0; i < max; ++i){
cout << "ms is : " <<typeid(ms[i]).name() << endl;
ms[i] = make_shared<CoinMoney>();
ms[i]->c50 = i+1;
ms[i]->c100 = i+2;
ms[i]->c500 = i+3;
}
}
int main(int argc, char* argv[]){
shared_ptr<CoinMoney> pm1[getSize(true)];
Create_moneys(pm1); // error
for(auto p : pm1)
CoinMoney_Print(*p);
return 0;
}
我收到此错误"无法将类型的非常量左值引用 ~ 绑定到类型的右值
我该如何解决这个问题?
Create_moneys()
是一个函数,它接受对指针的可变引用。
技术上可以以传播到调用方的方式修改指针本身。
例如:
int global_x;
void foo(int*& ptr) {
ptr = &global_x;
}
void bar() {
int local_x;
int * local_ptr = &local_x;
foo(local_ptr);
//local_ptr now points to global_x!
}
现在,pm1
是一个数组,当您调用Create_moneys(pm1);
时,语言会创建一个指向数组开头的临时指针。该临时值称为 RValue,RValue 是不可修改的常量,因此不允许将它们用作可变引用参数。
修复很简单,因为Create_moneys()
不修改指针,它没有理由通过引用来获取其参数,只需将其声明为 Create_moneys(shared_ptr<CoinMoney>* ms)
即可。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 将成员函数的返回类型引用到C++中的自定义类
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- C++:类类型引用运算符=用法
- 将 const 类型引用对象注册为类成员对象C++
- 错误:绑定到类型引用会丢弃限定符
- 如果作为基类型引用传递,派生类型会解构吗
- 未分配返回未定义对象类型引用的 C++ 函数的返回值时会发生什么情况
- 类型引用的初始化无效
- C++ 从函数返回多个类型引用并将它们强制转换为我们需要的类型
- 函数常量返回类型:类型引用的初始化无效
- 将类型的嵌套类型引用为类模板的参数的问题
- 与返回类型(引用、常量引用)混淆
- 调用具有const键类型引用的std::指针集的count方法
- 返回运算符类型=-引用或值
- 非类型引用形参/实参
- c++中定义不同类型引用的区别
- 为什么返回类型引用输出流
- 非类型(引用)模板参数和链接
- 类型引用的初始化无效