3

我正在用 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;
}
}
4

2 回答 2

16

你的括号坏了。最终结果是您试图在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).

于 2013-10-18T22:36:53.990 回答
1

使用 Visual Studio 2013 C++,我遇到了无法解释的编译错误。

编译错误是:

*main.cpp(325): error 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)故障引起的,所以在您更换内存之前,只需删除评论并查看...

  • 迈克尔·哈弗拉蒂 מיכאל האפרתי
于 2014-10-11T15:44:49.113 回答