none
预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) RRS feed

  • 问题

  • 我用VS2008写C的程序,调试时出现错误提示:

    "预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)"

    请问是什么原因?如何解决,最好给出详细步骤,谢谢!
    2008年9月9日 11:02

答案

  • 你好!

    据你所述,你编写了一个C程序。那么出现这种提示可能的情况为:

    1.你编译一个C文件,但是却引用了C++专有的一些include。

    2.当项目中混合了 .cpp 和 .c 文件时,编译器会对它们采取不同的编译方式,这主要是因为对函数声明的处理方式不同,因而不能共用一个预编译头文件。

     

    具体你可以参考一下链接:http://www.cnitblog.com/tinnal/archive/2008/08/28/48478.aspx

    其中有详细的解决步骤。

     

    希望对你有用!

     

    如果还有进一步的问题,欢迎跟帖!

     

    Alex LI

    2008年9月11日 5:31

全部回复

  • 你好!

    据你所述,你编写了一个C程序。那么出现这种提示可能的情况为:

    1.你编译一个C文件,但是却引用了C++专有的一些include。

    2.当项目中混合了 .cpp 和 .c 文件时,编译器会对它们采取不同的编译方式,这主要是因为对函数声明的处理方式不同,因而不能共用一个预编译头文件。

     

    具体你可以参考一下链接:http://www.cnitblog.com/tinnal/archive/2008/08/28/48478.aspx

    其中有详细的解决步骤。

     

    希望对你有用!

     

    如果还有进一步的问题,欢迎跟帖!

     

    Alex LI

    2008年9月11日 5:31
  • 谢啦!

     

    2008年9月11日 13:49
  • 即使只用Visual C++,而且用的是VC2005,也有可能出现这种情况。

    使用ATL编写COM组件时,有时需要将一些通用的接口分离出去,单独编写.idl文件以便重用,就像.h头文件被多处引用一样。然后使用import指令将此
    .idl文件导入到当前COM时,就像通常的import oaidl.idl; import ocidl.idl一样。编译时MIDL命令不处理此文件,会提示没有定义此文件中的IID。用MIDL手动处理,或者在预编译事件中加上命令行自动处理,结果会出现生成的*_i.c文件非正常结束(找不到stdafx.h文件)的错误,手动加上stdafx.h后,就会出现这里讨论的错误。

    这个问题的解决办法也很简单,就是手动添加相关IID的定义。但不知有无更优雅的方法使得
    MIDL自动将所需的内容加到当前项目的生成文件中?




    2008年11月7日 14:40