【问题标题】:Compiler Error C2143 when using a struct使用结构时出现编译器错误 C2143
【发布时间】:2008-08-29 21:24:52
【问题描述】:

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

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

在需要简单结构的行上

 struct foo test;

结构体的 typedef 也是如此。

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

【问题讨论】:

    标签: c visual-c++


    【解决方案1】:

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

    【讨论】:

    • 好像我也有同样的问题。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      foo test;
      

      而不是

      struct foo test;
      

      这在 C 和 C++ 中都可以使用

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2010-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-25
            • 2014-08-14
            • 1970-01-01
            • 2012-10-12
            • 1970-01-01
            相关资源
            最近更新 更多