使用结构时发生编译器错误C2143
时间:2020-03-05 18:45:14 来源:igfitidea点击:
我正在用Visual C ++编译一个简单的.c,并编译为C代码(/ TC)
我得到这个编译器错误
error C2143: syntax error : missing ';' before 'type'
在要求简单结构的一行上
struct foo test;
使用结构的typedef也是如此。
error C2275: 'FOO' : illegal use of this type as an expression
解决方案
回答
我们是否在前一行不小心省略了分号?如果前一行是" #include",则可能必须在其他地方查找缺少的分号。
编辑:如果其余代码是有效的C ++,则可能没有足够的信息来确定问题所在。也许我们可以将代码发布到pastebin,以便我们可以看到整个过程。
理想情况下,在将其缩小为较小的过程中,它将突然开始工作,然后我们将发现问题!
回答
如何定义结构类型?有两种方法可以做到这一点:
// This will define a typedef for S1, in both C and in C++ typedef struct { int data; int text; } S1; // This will define a typedef for S2 ONLY in C++, will create error in C. struct S2 { int data; int text; };
回答
因为我们已经为该结构创建了一个typedef(因为我们使用的是's1'版本),所以我们应该这样写:
foo test;
而不是
struct foo test;
这将在C和C ++中都适用
回答
C2143基本上说,编译器得到了一个令牌,它认为在当前情况下是非法的。该错误的含义之一是,实际问题可能在触发编译器错误的行之前存在。正如Greg所说,我认为我们需要查看更多代码来诊断此问题。
我也不确定为什么我们在试图弄清楚为什么它不能编译为C时认为有效的C ++代码这一事实会有所帮助? C ++在很大程度上是C的超集,因此有很多原因使有效的C ++代码在语法上可能不是正确的C代码,尤其是C ++将结构视为类!
回答
我忘了在C语言中,我们必须在任何代码之前声明所有变量。