C++错误:无法匹配呼叫

wai*_*933 3 c++ stdstring no-match

我正在尝试用C++编译以下代码

string initialDecision () 
{
 char decisionReviewUpdate;

 cout << "Welcome. Type R to review, then press enter." << endl;
 cin >> decisionReviewUpdate;

 // Processing code
}

int main()
{
    string initialDecision;
    initialDecision=initialDecision();

    //ERROR OCCURS HERE

 // More processing code
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这里说"出现错误"的地方,我在编译时遇到以下错误:"错误:没有匹配调用'(std :: string)()'.我该如何解决这个问题?

Mar*_*off 17

不要给你的字符串和你的函数命名相同,错误就会消失.

当您声明具有相同名称的局部变量时,编译器"忘记"存在具有该名称的函数.


Unc*_*ens 5

局部变量遮盖了全局函数的名称。最好重命名局部变量,但是还有一个作用域运算符,可让您专门访问全局名称:

initialDecision = ::initialDecision();
Run Code Online (Sandbox Code Playgroud)


AnT*_*AnT 5

这在 C++ 中称为“名称隐藏”。在此特定示例中,您要声明一个局部变量,该变量与命名空间范围内的函数具有相同的名称。在该变量的声明点之后,该函数变为hidden,每次您提到“initialDecision”名称时,编译器都会正确地假定您指的是该变量。由于您无法将函数调用运算符“()”应用于“字符串”类型的变量,因此编译器会发出错误消息。

在许多情况下,为了引用隐藏名称,您可以使用范围解析运算符“::”。例如,请参阅 UncleBens 的回复。