错误 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:“名称”:本地函数定义非法的主要内容,如果未能解决你的问题,请参考以下文章
Cordova processMessage 失败:堆栈:未定义(和)错误:非法访问
在 GCP cloudbuild.yaml 中指定与“名称”不同的“执行函数”
显示这个错误error C2601: 'maxmin' : local function definitions are illegal是怎么回事?