使用结构时发生编译器错误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语言中,我们必须在任何代码之前声明所有变量。