2011-07-06 57 views
0

我正在使用Visual Studio 2010构建C项目。我的项目包含许多头文件,源文件和解析器。它使用lexbason文件。我在编译过程中得到一个错误,即以下Visual C++编译错误

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

我想我越来越喜欢,包括

#define WIN32_WINNT >= 0x0501 
在我的main.c文件

包含任何头文件之前的解决方案files.I无法摆脱这个错误。你能不能让我知道可能是这个错误的原因?

编辑

的代码片段,是显示错误是:

 list_Cons(0, list_List((POINTER)INPUT) 

令人惊讶的是,如果我改变输入INPUT1,我得到了同样的错误。改变是坚忍不拔的。

+0

这是你在找什么? http://support.microsoft.com/kb/892073。没有看到代码就无法分辨出更多。 – BlackJack

+0

失败的线路来自哪里?它是否在'yacc'生成的文件中?在这种情况下,您必须咨询yacc的手册。 – Vlad

+0

INPUT从哪里来? – Rudi

回答

0

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

+0

我不认为VS2010有一个关于如何编译'* .y'的内置规则,所以这个问题必须在别的地方。 – Vlad

+0

我已经使用lex和bison生成了yaac和lex文件生成的相应头文件和源文件。我正在编译这些文件。 – thetna

+0

@thetna:发布的错误消息仍然看起来像是试图用C++编译器编译“abc.y”。如果你已经有了yacc输出,你应该确保这些文件包含在项目中,并从项目中移除abc.y。 – aschepler

2

想必您阅读thisthis

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

另外,检查你实际上是#包括WINUSER.H

0

至于我自己,我用CMake它可以产生MSVC项目与其他构建类型一起。你可以告诉它一个.y needs to be processed超出了C/C++文件,它将指示MSVC调用预处理非C/C++部分所需的任何外部工具。