我在编译我的项目时遇到一个很奇怪的问题,当我在现有的项目中直接加入相关的一些.h.cpp文件后(不再使用dll)重新编译,编译顺序从我的原有文件开始,直至新加入的文件为止,链接没有任何问题。
    但是,如果再重新打开我的项目编译时,却按照cpp文件名字母顺序开始,最后链接时出现:
     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 LIBCMTD.lib(dbgdel.obj)
     Debug/hil2csta.exe : fatal error LNK1169: one or more multiply defined symbols found 错误。
    当然我可以通过修改setting选择using shared dll来解决,但是旧项目一直是not using mfc的。    为什么编译顺序的改变可以有不同的结果,如何控制???    请赐教!谢谢!

解决方案 »

  1.   

    这个应该是连接问题,我觉得包含文件有问题 最好 在包含文件的时候 #ifndefine _文件名_h 来判断
      

  2.   

    to awnucel:不是这个意思,我是说用.h和.cpp来代替dll加入项目时,由于新加入的文件同项目原有的文件在build时,不同的编译顺序造成了不同结果。不再使用dll了。to  joachern: 我所有的头文件中都是这样作的。非常奇怪,我才加入这些.h .cpp文件后就编译,顺讯是从我的原有文件开始,没有任何问题。但是关闭后删除再打开,编译顺序从以a字母开头的文件开始编译,出错。
      

  3.   

    与编译顺序无关,project settings中的runtime library设置有问题。
      

  4.   

    我用的是debug multithreaded项,有什么问题,请明示。