gcc 错误“预期 ')' 在 '[' 标记”之前

Posted

技术标签:

【中文标题】gcc 错误“预期 \')\' 在 \'[\' 标记”之前【英文标题】:gcc error "expected ')' before '[' token"gcc 错误“预期 ')' 在 '[' 标记”之前 【发布时间】:2013-08-26 14:00:40 【问题描述】:

我在尝试使用 GCC 编译我的程序时收到这些错误,我不确定是什么原因造成的。

functions.h:21: error: expected ')' before '[' token
functions.h:22: error: expected ')' before '[' token
functions.h:23: error: expected ')' before '[' token
functions.h:25: error: expected ')' before '[' token
functions.h:26: error: expected ')' before '[' token
functions.h:27: error: expected ')' before '[' token

我的程序在 Visual Studio 2012 中编译良好。

这是似乎导致错误的头文件。

struct subject

    char year[5];
    char session;
    char code[8];
    char credit[3];
    char mark[4];
;

struct data

    char name[30];
    char id[30];
    char cc[30]; 
    char course[80];
    struct subject subjects[30];
    int gpa;
;

void displayRecord(data [], int);
int nameSearch(data [], char [], int [], int);
void editRecord(data [], int, int);
char getChar(const char [], int);
int getData(data []);
void displayData(data []);
void deleteRecord(data [], int, int);

我正在像这样调用编译器:

gcc -o 测试函数.cpp 函数.h main.cpp

我很困惑,所以任何帮助都将不胜感激!

【问题讨论】:

问第21行会不会太过分了? 这段代码没有问题!你能提供一个SSCCE吗? 你是如何调用 gcc 的? void displayRecord(data [], int);是第 21 行 从命令行中删除functions.h!它尝试使用默认语言 (C) 编译 functions.h。但是,标头不是独立编译的,它们是通过包含在其他翻译单元中来编译的。 【参考方案1】:

我的心理调试能力告诉我,您的 Visual Studio 将代码编译为 C++,而 gcc 将其编译为 C。由于您在函数参数中缺少 data 之前的 struct 关键字,因此 C 编译器不会不知道该怎么办。尝试通过 g++ 而不是 gcc 运行它(并可能确保包含的源文件的扩展名是 .C.cpp

【讨论】:

@DavidHeffernan,用 gcc 编译提供的代码给出了报告的错误。 @David Heffernan 至少对于 gcc 4.4 和 4.5,我得到与使用 gcc 编译的 OP 相同的错误。【参考方案2】:

问题是您将functions.h 传递给编译器。那是一个包含文件,您应该让两个 .cpp 文件包含它。无需在编译器的命令行调用中传递它。只需从 gcc 的命令行调用中删除 functions.h

因为这是 C++,你应该使用 g++ 而不是 gcc 来编译。由于您使用了gcc,因此编译器将functions.h 视为C,代码无效C。

所以,我认为你的编译应该是

g++ -o 测试函数.cpp main.cpp

【讨论】:

.cpp 后缀告诉gccfunctions.cppmain.cpp 视为C++ 源代码。但是您在gcc 命令行上传递的文件functions.h 会导致gcc 将其视为C 源代码。您可以直接编译头文件,但这仅对检查错误有用。而且你应该使用g++ 而不是gcc 来编译C++,尽管它只在链接期间很重要。

以上是关于gcc 错误“预期 ')' 在 '[' 标记”之前的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 帮助? - " 'didRotateFromInterfaceOrientation' 未声明 " + " 预期 ';'在':'标记之前“

Solaris 上的 GCC - 在“0x00000002”之前解析错误

如何在 gcc/clang 中的错误和警告之间添加换行符/边框

递归 lambda 返回时的 gcc 4.9 内部编译器错误

GCC:错误:表达式后出现垃圾 `:0x+57f120'

网站移植到linux上后常犯的错误