我试图编译下面的代码在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同时作为变量和函数。这极大地混淆编译器。尝试重命名变量别的东西;然后,将工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top