我正在用C ++编写一个小程序。当我尝试使用MS VS 2013编译器编译它时,我收到一个错误:“C2601:'main':本地函数定义是非法的”。这是什么意思?我的代码是:
#include <iostream>
int n;
int pomocniczaLiczba;
using namespace std;
int ciong(int n){
switch (n)
{
case 1:
return 1;
break;
case 2:
return 2;
break;
default:
pomocniczaLiczba = ciong(n - 2) + ciong(n - 1) * ciong(n - 1);
return pomocniczaLiczba;
break;
}
int main()
{
cin >> n;
cout >> ciong(n);
return 0;
}
}
答案 0 :(得分:15)
您的包围被破坏了。最终结果是您尝试在main
内定义ciong
函数。 C ++不支持嵌套函数定义。因此编译错误。
代码应为:
#include "stdafx.h"
#include <iostream>
using namespace std;
int ciong(int n)
{
switch (n)
{
case 1:
return 1;
break;
case 2:
return 2;
break;
default:
int pomocniczaLiczba = ciong(n - 2) + ciong(n - 1) * ciong(n - 1);
return pomocniczaLiczba;
break;
}
} // <----- Oops, this was missing in your code
int main()
{
int n;
cin >> n;
cout << ciong(n) << endl;
return 0;
}
还有其他错误。例如,您的意思是cout << ciong(n)
。
答案 1 :(得分:0)
使用Visual Studio 2013 C ++,我收到了无法解释的编译错误。
编译错误是:
* main.cpp(325):错误C2601:'FLAG':本地函数定义是非法的
main.cpp(323):此行包含尚未匹配的“{”
main.cpp(326):致命错误C1075:在'main.cpp(323)'左括号'{'匹配之前找到的文件结尾*
但是我的代码没有任何问题。我统计了所有括号和匹配的数字。另一个函数里面没有任何函数。
我通过从源代码中删除所有“//”注释来解决它。似乎这样做的原因是错误的行格式化导致编译器错过换行符,因此注释后的行也被视为注释。
例如:
// This is a comment
This_is_a_line;
被视为:
// This is a comment This_is_a_line;
网上有很多关于类似问题的帖子,有些甚至暗示它们可能是由机器上的内存(RAM)故障引起的,因此在更换RAM之前,只需删除注释并查看...... < / p>