3

我正在使用 Compile as C Code (/TC) 在 Visual c++ 中编译一个简单的 .c,我得到了这个编译器错误

错误 C2143:语法错误:缺少“;” 在“类型”之前

在需要简单结构的行上

 struct foo test;

使用结构的 typedef 也是如此。

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

4

5 回答 5

6

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

于 2008-08-29T23:52:27.797 回答
1

您是否不小心在前一行省略了分号?如果上一行是#include,您可能需要在别处寻找丢失的分号。

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

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

于 2008-08-29T21:26:36.667 回答
1

因为您已经为结构创建了 typedef(因为您使用了 's1' 版本),所以您应该编写:

foo test;

而不是

struct foo test;

这将适用于 C 和 C++

于 2008-08-29T22:27:19.203 回答
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; 
};
于 2008-08-29T21:39:37.960 回答
0

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

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

于 2008-08-29T23:23:50.673 回答