![](/img/trans.png)
[英]invalid initialization of non-const reference of type ‘std::string& from an rvalue of type ‘std::basic_string<char>
[英]Invalid initialization of non-const reference of type 'std::string*& {aka std::basic_string<char>*&}' from an rvalue of type 'std::string* {aka
我正在尝试解决这个我必须拼写数字的问题。
当我尝试通过引用调用我a
字符串数组时,我收到了这个错误。 但是如果我按值调用它,我不会出错。
我不知道右值来自哪里,因为我的字符串元素应该被视为左值。
#include <iostream>
#include <string>
using namespace std;
void spell(int n,string* &a){
if(n==0)
return;
spell(n/10,a);
cout<<a[n%10];
}
int main(){
int n;
cin>>n;
string a[10]{"zero ","one ","two ","three ","four ","five ","six ","seven ","eight ","nine "};
spell(n,a);
if(n<0)
return 0;
return main();
}
首先,调用main()
是非法的,所以return main();
是未定义的行为。 如果您想多次运行main()
的代码,请使用do..while
循环。
当string[]
数组在传递给spell()
时衰减为指向第一个元素的string*
指针时,编译器抱怨的右值出现了。 您对a
的声明是一个非常量左值引用,它不能绑定到右值,因此会出现编译器错误。
spell()
不会修改a
自身以指向其他地方,它只是访问数组中a
指向的string
对象,因此不需要通过引用传递a
,通过值传递它就可以了:
void spell(int n, string* a)
或者,通过const
引用传递它也可以,因为 const 左值引用可以绑定到右值:
void spell(int n, string* const &a)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.