wai*_*933 3 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;
}
Run Code Online (Sandbox Code Playgroud)
在这里说"出现错误"的地方,我在编译时遇到以下错误:"错误:没有匹配调用'(std :: string)()'.我该如何解决这个问题?
局部变量遮盖了全局函数的名称。最好重命名局部变量,但是还有一个作用域运算符,可让您专门访问全局名称:
initialDecision = ::initialDecision();
Run Code Online (Sandbox Code Playgroud)
这在 C++ 中称为“名称隐藏”。在此特定示例中,您要声明一个局部变量,该变量与命名空间范围内的函数具有相同的名称。在该变量的声明点之后,该函数变为hidden,每次您提到“initialDecision”名称时,编译器都会正确地假定您指的是该变量。由于您无法将函数调用运算符“()”应用于“字符串”类型的变量,因此编译器会发出错误消息。
在许多情况下,为了引用隐藏名称,您可以使用范围解析运算符“::”。例如,请参阅 UncleBens 的回复。