我正试图解决这个问题,我必须拼数字。当我试图调用我的字符串数组时 a
引用,我得到这个错误。但是如果我用value调用它,我没有得到任何错误。我不知道r值从哪里来,因为我的字符串元素应该被视为l值。
#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();
是 未定义行为. 使用 do..while
循环,如果你想运行 main()
的代码中多次出现。
编译过程中抱怨的r值是当 string[]
阵列 衰变 变成 string*
传递给第1个元素的指针。spell()
. 你的声明 a
是一个非const的lvalue引用,它不能被绑定到rvalue上,因此编译器出错。
spell()
不修改 a
本身指向其他地方,它只是在访问 string
数组中的对象 a
指向,所以不需要通过 a
以引用的方式传递,以值的方式传递就可以了。
void spell(int n, string* a)
或者,路过 const
引用也可以使用,因为const lvalue引用可以绑定到rvalue。
void spell(int n, string* const &a)