繁体   English   中英

'std::string*&amp; {aka std::basic_string 类型的非常量引用的初始化无效<char> *&amp;}' 来自 'std::string* {aka</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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM