c++ - 从 'std::string* {aka

标签 c++ pass-by-reference

我正在尝试解决这个我必须拼写数字的问题。
当我尝试调用我的字符串数组时 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/

相关文章:

c++ - Qt - 显示通过 QProcess 运行的 PowerShell 结果

php - 在php中跨类共享对象数组

javascript - 如何在javascript中通过引用将全局变量作为参数传递

c - 在 C 中通过引用传递数组

c++ - 使用 : 限制结构大小

c++ - 可移植标记指针

c++ - 指针数组无法解释的行为(带有浅拷贝)c++

c++ - BigInt 转换(gmp Bigint 到 botan bigint)

c++ - 在 C++ 中通过引用传递对象

java - Java 是 "pass-by-reference"还是 "pass-by-value"?