使用结构时编译器错误C2143

时间:2008-08-29 21:24:52

标签: c visual-c++

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

  

错误C2143:语法错误:缺少';'在'type'之前

在一行上调用一个简单的结构

 struct foo test;

使用struct的typedef也是如此。

  

错误C2275:'FOO':非法使用此类型作为表达式

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

您是否在前一行上意外省略了分号?如果上一行是#include,您可能需要查找丢失的分号。

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

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

答案 2 :(得分:1)

因为你已经为struct创建了一个typedef(因为你使用了's1'版本),你应该写:

foo test;

而不是

struct foo test;

这将适用于C和C ++

答案 3 :(得分:0)

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

// 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; 
};

答案 4 :(得分:0)

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

我也不确定为什么你认为这是有效的C ++代码在试图弄清楚为什么它不能编译为C时有用呢? C ++(很大程度上)是C的超集,因此有许多理由说明为什么有效的C ++代码可能在语法上不正确C代码,尤其是C ++将结构视为类!