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
后缀告诉gcc
将functions.cpp
和main.cpp
视为C++ 源代码。但是您在gcc
命令行上传递的文件functions.h
会导致gcc
将其视为C 源代码。您可以直接编译头文件,但这仅对检查错误有用。而且你应该使用g++
而不是gcc
来编译C++,尽管它只在链接期间很重要。以上是关于gcc 错误“预期 ')' 在 '[' 标记”之前的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 帮助? - " 'didRotateFromInterfaceOrientation' 未声明 " + " 预期 ';'在':'标记之前“
Solaris 上的 GCC - 在“0x00000002”之前解析错误
如何在 gcc/clang 中的错误和警告之间添加换行符/边框