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

时间:2009-10-10 18:11:19

标签: 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;
}

正确地说“这里发生错误”,编译时出现以下错误:“错误:调用'(std :: string)()'没有匹配。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:4)

局部变量会影响全局函数的名称。最好重命名局部变量,但也有scope操作符允许您专门访问全局名称:

initialDecision = ::initialDecision();

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

尝试重命名变量以使其与函数名称不匹配。

答案 4 :(得分:1)

问题是你将名称initialDecision重复为变量和函数。这极大地混淆了编译器。尝试将变量重命名为其他内容;它会起作用。