错误 C2601:“名称”:本地函数定义非法

Posted

技术标签:

【中文标题】错误 C2601:“名称”:本地函数定义非法【英文标题】:error C2601: "Name": local function definitions are illegal 【发布时间】:2015-04-23 18:45:39 【问题描述】:

我是 C++ 新手,正在学习继承和多态。我们需要编写一个包含 4 种员工类型(BasePlusCommission、CommisisonEmployee、Salried 和 TipWorker)的员工项目。我的项目有一个 main() 类,我为每种类型的员工使用了 switch 方法。我被困在了必须做多态性的 TipWorker 上。这是我到目前为止所得到的。

int main()

void virtualViaPointer(const Employee * const);
    
                cout << "Enter First Name: " << endl;
                cin >> firstName;
                cout << "Enter Last Name: " << endl;
                cin >> lastName;
                cout << "Enter SSN: " << endl;
                cin >> SSN;
                if (SSN.length() == 9)
                
                    SSN = true;
                
                else
                
                    cout << "Please enter SSN again with 9 digits only:" << endl;
                    cin >> SSN;
                
                cout << "Enter wages: " << endl;
                cin >> wage;
                cout << "Enter hours: " << endl;
                cin >> hours;
                cout << "Enter tips: " << endl;
                cin >> tips;

                TipWorker employee4(firstName, lastName, SSN, wage, hours, tips);
                employee4.print();
                cout << fixed << setprecision(2);

                vector < Employee * > employees(1);
                employees[0] = &employee4;

                cout << "Employee processed polymorphically via dynamic binding: \n\n";
                cout << "Virtual function calls made off base-class pointers:\n\n";
                for (const Employee *employeePtr : employees)
                    virtualViaPointer(employeePtr);
                void virtualViaPointer(const Employee * const baseClassPtr)
                
                    baseClassPtr->print();
                    cout << "\nEarned $" << baseClassPtr->earnings() << "\n\n";
                
                    break;
      

当我运行项目时,我遇到了这个错误:

错误 C2601:“virtualViaPointer”:本地函数定义为 非法的

void virtualViaPointer(const Employee * const baseClassPtr)
                    
                        baseClassPtr->print();
                        cout << "\nEarned $" << baseClassPtr->earnings() << "\n\n";
                    

谁能帮帮我?非常感谢!

【问题讨论】:

这是不言自明的。您在函数 main 中定义了 virtualViaPointer,而在 C++ 中您不能有本地函数(不包括 lambda,但它们有不同的语法) C++ can we have functions inside functions?的可能重复 那么我该如何解决这个错误呢?因为我不是很明白你的意思 没关系,我想我现在明白了。我解决了。但是谢谢你的想法 【参考方案1】:

您不能在另一个函数中定义一个函数。任何函数定义都应在任何其他函数定义之外。

virtualViaPointer 的定义放在main 的主体之外。

【讨论】:

我现在得到了那个部分。当我将它放在我的 main() 之外时它起作用了。但是我怎样才能增加20%的收入。你能帮我解决这个问题吗? @Phu Nguyen 我不知道你是怎么计算收入的,但是乘以 1.2 还不够吗? 大声笑,我问了这么多愚蠢的问题。我实际上解决了它。我乘以 1.2 但在错误的地方使用它。也感谢您的回复:)【参考方案2】:

您可以在函数中声明函数,但不能定义(!)该函数。但是,您可以在函数中使用本地结构/类或 lambda:

#include <iostream>
void f()

  void print(); // mostly useless - maybe a most vexing parse error
  struct Print 
    static void apply(const char* s)  std::cout << s << '\n'; 
  
  Print::apply("Hello");
  auto lambda = [] (const char* s)  std::cout << s << '\n'; ;
  lambda("World");

注意:本地结构不需要 C++11(另外,它在调试时可能看起来更好)

【讨论】:

以上是关于错误 C2601:“名称”:本地函数定义非法的主要内容,如果未能解决你的问题,请参考以下文章

C# 本地函数-

Cordova processMessage 失败:堆栈:未定义(和)错误:非法访问

在 GCP cloudbuild.yaml 中指定与“名称”不同的“执行函数”

从函数中指定 mutate() 中使用的新变量的名称

显示这个错误error C2601: 'maxmin' : local function definitions are illegal是怎么回事?

数据流 - 未调用函数 - 错误 - 未定义名称