gpt4 book ai didi

c++ - 不能将类型的非常量左值引用绑定(bind)到类型的右值

转载 作者:行者123 更新时间:2023-11-28 01:24:43 26 4
gpt4 key购买 nike

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;
}

我收到此错误“无法将 ~ 类型的非 const 左值引用绑定(bind)到类型的右值

我该如何解决这个问题?

最佳答案

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)相反。

关于c++ - 不能将类型的非常量左值引用绑定(bind)到类型的右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54385365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com