我有一些cpp文件,有的用了mfc,有的没有用mfc,当放在一起用的时候经常会报这样的错误:c:\dev\vs6\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #include <windows.h>
Error executing cl.exe.

解决方案 »

  1.   

    你#include <windows.h>试试啊。
      

  2.   

    你的代码中不用再包含windows.h了,MFC的相关类已经包含过了
      

  3.   

    把#include <windows.h>注释掉
    再一个个加上需要的头文件
      

  4.   

    把#include <windows.h>去掉
      

  5.   

    把windows.h去掉,说的容易呀,一去掉,所有跟win32 api相关的东西都用不了了。
    而我建的工程是不用MFC的console,包含的文件里也没有用MFC的库函数的。另外,我非常不喜欢stdafx这个文件,真不知道用来做什么,什么地方该包含什么我还不知道吗。我在工程里一般是禁止使用什么precompile header
      

  6.   

    受不了,折腾了半天,终于把上面那个问题搞定了,又出来一堆:
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCD.lib(new.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCD.lib(dbgdel.obj)
    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
    nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
    Debug/threadtest.exe : fatal error LNK1120: 2 unresolved externals
      

  7.   


    对于可能会出现重复包含的头文件,同时加上预编译语句,以免重复包含
    #ifndef __XXX_INCLUDE_IN_
    #define __XXX_INCLUDE_IN_
    #include "XXXX.h"
    #endif
      

  8.   


    同时WIN32的程序一般都使用多线程的运行库
    /MDd
    /MTd
    /MD
    /MT
      

  9.   

    我查到MSDN里有说:
    Linking code compiled with /MT with the library LIBC.LIB causes LNK2001 on _beginthread, _beginthreadex, _endthread, and _endthreadex. 不过我还是不管3721把/MTd加到编译选项里了,好了一点,现在只剩:
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpmtd.lib(delop.obj)
    Debug/threadtest.exe : fatal error LNK1169: one or more multiply defined symbols found
    Error executing link.exe.vc的编译器真是TMD要命
      

  10.   

    /MDd  动态DLL DEBUG
    /MTd  静态DLL DEBUG
    /MD   动态DLL RELEASE
    /MT   静态DLL RELEASE
      

  11.   

    把#include <windows.h>去掉
      

  12.   

    我已经把整个工程搜索了N编,确认在每个.h,cpp文件里都没有任何跟new相关的字眼了...郁闷
      

  13.   

    总算解决了,虽然有warning ,用了/FORCE命令。谢谢各位
      

  14.   


    这样草草解决也不能算解决呀,问题原因都没找到,况且还有warning
    不彻底解决程序以后还是会出毛病的
      

  15.   

    你在project setting找到你不需要MFC的文件,打开“c++”属性页,“category”选择precompiled headers,然后选"Not using precompiled headers"这样你的程序就不会有问题了。