我收到“没有匹配的函数调用”的错误提示,为什么?提前致谢。

#include <iostream>
#include <string>
using namespace std;

void redactDigits(string & s);

int main(int argc, const char * argv[])
{

    redactDigits("hello");

    return 0;
}

void redactDigits(string & s){

double stringLength = 0;
string copyString;

stringLength = s.size();

for (int i = 0; i < stringLength + 1; i++) {
    if (atoi(&s[i])) {
        copyString.append(&s[i]);
    }

    else {
        copyString.append("*");
    }


}

s = copyString;

cout << s;

}

最佳答案

您在函数声明中缺少void。此外,您需要传递const引用,以便能够绑定(bind)到临时目录:

void redactDigits(const string & s);
^^^^              ^^^^^

没有const,此调用是非法的:
redactDigits("hello");

尽管某些编译器具有非标准扩展名,这些扩展名允许非常量引用绑定(bind)到临时文件。

编辑:由于您试图在函数内部修改输入字符串,因此另一种解决方案是保留原始函数签名,然后将其传递为std::string而不是以空终止的字符串文字,或者仅返回std::string:
std::string redactDigits(const std::string& s)
{
  ...
  return copyString;
}

然后
std::string s = redactDigits("hello");

10-06 10:37