题
我试图编译下面的代码在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)()’我怎样才能解决这个
解决方案
不要给你的字符串,你的函数相同的名称,错误就会消失。
在编译器“遗忘”存在具有该名称的功能,当声明具有相同名称的局部变量。
其他提示
在局部变量屏蔽全局函数的名称。最好是重新命名局部变量,但也有范围的运营商,它可以让你特别访问全局名称:
initialDecision = ::initialDecision();
此被称为“名字隐藏”在C ++中。在这个特殊的例子,你声明一个局部变量,它具有相同的名称命名空间范围的功能。该变量的声明后点的功能变得的隐藏的,每次你提到的'initialDecision的名字,编译器会理所当然地认为你是指时间变量。由于不能函数调用操作符“()”适用于类型的“字符串”的变量,所述编译器将发出错误消息。
在许多情况下,以指隐藏名字,你可以使用范围解析运算符“::”。见UncleBens反应,例如
尝试重命名变量不匹配的函数名。
问题是你正在重复名称initialDecision同时作为变量和函数。这极大地混淆编译器。尝试重命名变量别的东西;然后,将工作。
不隶属于 StackOverflow