【问题标题】:Compilation error in visual C++Visual C++ 中的编译错误
【发布时间】:2011-07-06 12:32:26
【问题描述】:

我正在使用 Visual Studio 2010 构建 C 项目。我的项目包含许多头文件、源文件和解析器。它使用lex bason文件。我在编译过程中遇到一个错误,并且出现以下错误

abc.y:error C2065: 'INPUT' : undeclared identifier 

我尝试了我想要的解决方案,包括

#define WIN32_WINNT >= 0x0501

在我的 main.c 文件中包含任何头文件之前。我无法摆脱这个错误。请告诉我这个错误的原因是什么?

编辑

显示错误的代码的 sn-p 是:

     list_Cons(0, list_List((POINTER)INPUT)

令人惊讶的是,如果我将 INPUT 更改为 INPUT1,我会得到同样的错误。改变是坚忍的。

【问题讨论】:

  • 这是您要找的吗? support.microsoft.com/kb/892073。不看代码就说不清楚。
  • 失败线从何而来?它在yacc 生成的文件中吗?在这种情况下,您必须查阅 yacc 的手册。

标签: c visual-c++ compiler-errors yacc


【解决方案1】:

大概你读过thisthis

#define WIN32_WINNT >= 0x0501 不会工作。您应该尝试改用#define WIN32_WINNT 0x0501

另外,检查你是否真的是#include winuser.h

【讨论】:

    【解决方案2】:

    C++ 编译器无法处理 *.y 文件。为此,您需要一个 yacc / bison 程序,它不包含在 Visual Studio 2010 中。

    【讨论】:

    • 我觉得VS2010没有内置的规则来编译*.y,所以问题肯定出在别的地方。
    • 我已经生成了yaac和lex文件使用lex和bison生成的相应头文件和源文件。我正在一起编译这些文件。
    • @thetna:发布的错误消息看起来仍然像是在尝试使用 C++ 编译器编译“abc.y”。如果您已经有了 yacc 输出,您可能应该确保这些文件包含在项目中并从项目中删除 abc.y。
    • 实际上我也删除了这些。我正在尝试。我遇到了同样的错误。
    • @aschepler 也许 abc.c 是从 abc.y 生成的,并且 c 文件中有 #line 指令,这些指令引用回 abc.y
    【解决方案3】:

    我自己使用CMake,它可以生成 MSVC 项目以及其他构建类型。您可以告诉它一个 .y needs to be processed 与 C/C++ 文件一起使用,它会指示 MSVC 调用任何必要的外部工具来预处理非 C/C++ 部分。

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多