【问题标题】: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 的回复。

        【讨论】:

          【解决方案4】:

          尝试将变量重命名为与函数名称不匹配。

          【讨论】:

            【解决方案5】:

            问题是您将名称 initialDecision 重复为变量和函数。这极大地混淆了编译器。尝试将变量重命名为其他名称;然后它就会工作。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-12-08
              • 2021-01-11
              • 2020-07-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多