【问题标题】:C++ Error: No Match for CallC++ 错误:呼叫不匹配
【发布时间】:2010-12-05 15:22:44
【问题描述】:
我正在尝试用 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) ()'。我该如何解决这个问题?
【问题讨论】:
标签:
c++
stdstring
no-match
【解决方案1】:
不要给你的字符串和你的函数同名,错误就会消失。
当你声明一个同名的局部变量时,编译器“忘记”了有一个同名的函数。
【解决方案2】:
局部变量会隐藏全局函数的名称。最好重命名局部变量,但还有范围运算符可以让您专门访问全局名称:
initialDecision = ::initialDecision();
【解决方案3】:
这在 C++ 中称为“名称隐藏”。在此特定示例中,您要声明一个局部变量,该变量与命名空间范围内的函数具有相同的名称。在该变量的声明点之后,该函数变为隐藏,并且每次您提及“initialDecision”名称时,编译器都会正确地假定您指的是该变量。由于您不能将函数调用运算符“()”应用于“字符串”类型的变量,因此编译器会发出错误消息。
在许多情况下,为了引用隐藏名称,您可以使用范围解析运算符'::'。例如,参见 UncleBens 的回复。
【解决方案5】:
问题是您将名称 initialDecision 重复为变量和函数。这极大地混淆了编译器。尝试将变量重命名为其他名称;然后它就会工作。