我正在尝试在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)()'没有匹配。我该如何解决这个问题?
答案 0 :(得分:16)
不要给你的字符串和你的函数命名相同,错误就会消失。
当您声明具有相同名称的局部变量时,编译器已“忘记”存在具有该名称的函数。
答案 1 :(得分:4)
局部变量会影响全局函数的名称。最好重命名局部变量,但也有scope操作符允许您专门访问全局名称:
initialDecision = ::initialDecision();
答案 2 :(得分:3)
这在C ++中称为“名称隐藏”。在此特定示例中,您声明了一个局部变量,该变量与命名空间范围中的函数同名。在声明该变量之后,该函数变为 hidden ,并且每次提到'initialDecision'名称时,编译器都会正确地假设您指的是该变量。由于您无法将函数调用运算符'()'应用于'string'类型的变量,因此编译器会发出错误消息。
在许多情况下,为了引用隐藏名称,您可以使用范围解析运算符'::'。例如,请参阅UncleBens响应。
答案 3 :(得分:1)
尝试重命名变量以使其与函数名称不匹配。
答案 4 :(得分:1)
问题是你将名称initialDecision重复为变量和函数。这极大地混淆了编译器。尝试将变量重命名为其他内容;它会起作用。