关于C#:使用结构时的编译器错误C2143

关于C#:使用结构时的编译器错误C2143

Compiler Error C2143 when using a struct

我正在用Visual C ++编译一个简单的.c,并编译为C代码(/ TC)
我得到这个编译器错误

error C2143: syntax error : missing ';' before 'type'

在要求简单结构的一行上

1
 struct foo test;

使用该结构的typedef也是如此。

error C2275: 'FOO' : illegal use of this type as an expression


我忘了在C语言中,您必须在任何代码之前声明所有变量。


因为您已经为该结构创建了一个typedef(因为您使用的是's1'版本),所以您应该这样写:

1
foo test;

而不是

1
struct foo test;

这将在C和C ++中都适用


您是否在前一行不小心省略了分号?如果前一行是#include,则可能必须在其他位置查找缺少的分号。

编辑:如果您的其余代码是有效的C ++,则可能没有足够的信息来确定问题所在。也许您可以将代码发布到pastebin,以便我们可以看到整个过程。

理想情况下,在将其缩小为较小的过程中,它将突然开始工作,然后您将发现问题!


C2143基本上说,编译器得到了一个令牌,它认为在当前情况下是非法的。该错误的含义之一是,实际问题可能在触发编译器错误的行之前存在。正如Greg所说,我认为我们需要查看更多代码来诊断此问题。

我也不确定为什么您在尝试弄清楚为什么它不能编译为C时认为这是有效的C ++代码这一事实有用吗? C ++在很大程度上是C的超集,因此有很多原因使有效的C ++代码在语法上可能不是正确的C代码,尤其是C ++将结构视为类!


如何定义您的结构类型?有两种方法可以做到这一点:

1
2
3
4
5
6
7
8
9
10
11
// 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;
};


推荐阅读