我正在使用COMPILE作为C代码(/TC)编译一个简单的.C,并且我收到了此编译器错误

错误C2143:语法错误:丢失的 ';'在“类型”之前

在需要简单结构的行上

 struct foo test;

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

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

有帮助吗?

解决方案

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

其他提示

您是否不小心遗漏了上一行中的分号?如果前一行是 #include, ,您可能需要在其他地方寻找丢失的分号。

编辑:如果代码的其余部分是有效的 C++,则可能没有足够的信息来确定问题所在。也许你可以将你的代码发布到 帕斯特宾 所以我们可以看到整个事情。

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

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

foo test;

而不是

struct foo test;

这在 C 和 C++ 中都适用

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top