使用结构时出现编译器错误 C2143

Compiler Error C2143 when using a struct

提问人:CiNN 提问时间:8/30/2008 最后编辑:Vadim KotovCiNN 更新时间:10/11/2017 访问量:4624

问:

我正在使用编译为 C 代码 (/TC) 在 visual c++ 中编译一个简单的 .c 我收到这个编译器错误

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

在需要简单结构的行上

 struct foo test;

使用结构的 typedef 也是如此。

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

C 可视化 C++

评论


答:

1赞 Greg Hewgill 8/30/2008 #1

您是否不小心在上一行中省略了分号?如果上一行是 ,则可能需要在其他地方查找缺少的分号。#include

编辑:如果代码的其余部分是有效的 C++,那么可能没有足够的信息来确定问题所在。也许你可以把你的代码发布到pastebin上,这样我们就可以看到整个事情。

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

0赞 17 of 26 8/30/2008 #2

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

// 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; 
};
1赞 Will Dean 8/30/2008 #3

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

foo test;

而不是

struct foo test;

这适用于 C 和 C++

0赞 Andrew O'Reilly 8/30/2008 #4

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

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

6赞 CiNN 8/30/2008 #5

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

评论

0赞 user58670 3/12/2009
似乎我也有同样的问题。