我正在尝试解决这个我必须拼写数字的问题。
当我尝试调用我的字符串数组时 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();
}
最佳答案
首先,calling main()
is illegal , 所以 return main();
是未定义的行为。使用 do..while
如果您想运行 main()
,则改为循环的代码多次。
编译器提示的右值出现在 string[]
时。数组 decays变成 string*
传递给 spell()
时指向第一个元素的指针.您对 a
的声明是一个非常量左值引用,它不能绑定(bind)到右值,因此会出现编译器错误。spell()
不修改a
自己指向其他地方,它只访问 string
数组中的对象 a
指向,所以不需要通过a
通过引用,按值传递它就可以了:void spell(int n, string* a)
Live Demo
或者,通过 const
传递它引用也将起作用,因为 const 左值引用可以绑定(bind)到右值:void spell(int n, string* const &a)
Live Demo
关于c++ - 从 'std::string* {aka,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61512468/