我写了一个类。这个类要用到 我写的另外3各类,
////在这个类的d.cpp中
#include "a.h"
#include "b.h"
#include "c.h"
但是现在在另外3各类的头文件中都要用到  
#import <msxml.dll> named_guids
using namespace MSXML;
这样两句话(因为在三个类头文件中都用到了这种引入的类型)现在我编译d.cpp文件  就会出现重复定义的问题!  如何解决 ???

解决方案 »

  1.   

    每个头文件加入:#ifndef __A_H_
    #define __A_H_
    ...
    ...#endif
      

  2.   

    看看另外三个文件能不能把:
    #import <msxml.dll> named_guids
    using namespace MSXML;
    写到CPP里。
      

  3.   

    你把这句放在如上定义好的头文件m.H中:
    每个头文件(A,B,C)包含m。h就行了。
    #import <msxml.dll> named_guids我记得namespace是在本文件内有效的,使用要单独加入
    using namespace MSXML;
      

  4.   

    如果用vc的话,最好加在stdafx.h里面这样最好,如果没有这个文件的话自己建立一个头文件
    global.h然后在这里面写上:
    #import <msxml.dll> named_guids
    using namespace MSXML;然后在a,b,c中加上#include "global.h"就可以了
      

  5.   

    checkyvc6(checkyvc6)::
     
    你的方法实现和我直接加
    #import <msxml.dll> named_guids
    using namespace MSXML;
    经过预编译之后  效果不是一样的吗?  我觉得不行
      

  6.   

    同意一楼意见,你要试一下,不要靠觉得
    a.h中添加
    #ifndef __A_H_//第一行
    #define __A_H_
    ...
    ...#endif//最后一行aa.h中添加
    #ifndef __AA_H_//第一行
    #define __AA_H_
    ...
    ...#endif//最后一行
      

  7.   

    我觉得一楼不正确,还是会重复定义的
    关键是把他:
    #import <msxml.dll> named_guids
    using namespace MSXML;
    放在一个只会包含一次的文件中。比如stdafx.h ?
      

  8.   

    #ifdef _MSXML
    #undef _MSXML
    #import <msxml.dll> named_guids
    using namespace MSXML;
    #enfif行吗,呵呵?
      

  9.   

    Linking...
    PpconfXmlManage.obj : error LNK2005: "class _com_ptr_t<class _com_IIID<struct MSXML::IXMLDOMDocument,&struct __s_GUID  _GUID_2933bf81_7b36_11d2_b20e_00c04f983e60> >  g_pXmlDoc" (?g_pXmlDoc@@3V?$_com_ptr_t@V?$_com_IIID@UIXMLDOMDocument@MSXML@@$1?_GUI
    D_2933bf81_7b36_11d2_b20e_00c04f983e60@@3U__s_GUID@@A@@@@A) already defined in PpXmlManage.obj
    PpconfXmlManage.obj : error LNK2005: "class _com_ptr_t<class _com_IIID<struct MSXML::IXMLDOMElement,&struct __s_GUID  _GUID_2933bf86_7b36_11d2_b20e_00c04f983e60> >  g_pXmlElement" (?g_pXmlElement@@3V?$_com_ptr_t@V?$_com_IIID@UIXMLDOMElement@MSXML@@$
    1?_GUID_2933bf86_7b36_11d2_b20e_00c04f983e60@@3U__s_GUID@@A@@@@A) already defined in PpXmlManage.obj
    nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in LIBCMTD.lib(dllmain.obj)
    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)
    PpconfXmlManage.obj : warning LNK4006: "class _com_ptr_t<class _com_IIID<struct MSXML::IXMLDOMDocument,&struct __s_GUID  _GUID_2933bf81_7b36_11d2_b20e_00c04f983e60> >  g_pXmlDoc" (?g_pXmlDoc@@3V?$_com_ptr_t@V?$_com_IIID@UIXMLDOMDocument@MSXML@@$1?_G
    UID_2933bf81_7b36_11d2_b20e_00c04f983e60@@3U__s_GUID@@A@@@@A) already defined in PpXmlManage.obj; second definition ignored
    PpconfXmlManage.obj : warning LNK4006: "class _com_ptr_t<class _com_IIID<struct MSXML::IXMLDOMElement,&struct __s_GUID  _GUID_2933bf86_7b36_11d2_b20e_00c04f983e60> >  g_pXmlElement" (?g_pXmlElement@@3V?$_com_ptr_t@V?$_com_IIID@UIXMLDOMElement@MSXML@
    @$1?_GUID_2933bf86_7b36_11d2_b20e_00c04f983e60@@3U__s_GUID@@A@@@@A) already defined in PpXmlManage.obj; second definition ignored
    nafxcwd.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in LIBCMTD.lib(dllmain.obj); second definition ignored
    nafxcwd.lib(afxmem.obj) : warning LNK4006: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj); second definition ignored
    nafxcwd.lib(afxmem.obj) : warning LNK4006: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj); second definition ignored
       Creating library Debug/CXmlManaged.lib and object Debug/CXmlManaged.exp
    Debug/CXmlManaged.dll : fatal error LNK1169: one or more multiply defined symbols found
    Error executing link.exe.
      

  10.   

    回复人: superS(super慢) ( ) 信誉:100  2003-12-26 09:41:00  得分:0 
     
     
      我觉得一楼不正确,还是会重复定义的
    关键是把他:
    #import <msxml.dll> named_guids
    using namespace MSXML;
    放在一个只会包含一次的文件中。比如stdafx.h ?
      
     
    //=========
    agree
      

  11.   

    #import <msxml.dll> named_guids
    using namespace MSXML;上面两句话msxml的类型的导入
    可以用其他方式实现吗??
    就是去掉这两句话, 还能在所有的类头文件中使用这些导出类!
      

  12.   

    你把这句放在如上定义好的头文件m.H中:
    M。h文件用
    #ifndef __M_H_
    #define __M_H_#import <msxml.dll> named_guids...#endif
    包起来。每个头文件(A,B,C)包含m。h就行了。这样是绝对没有重复包含的问题的。
    请大家试了之后再否认我的观点。
    如果还是重复包含,把代码贴出来。
      

  13.   

    不好意思, 你的方法 我试了
    #ifndef __M_H_
    #define __M_H_ 
    #endif但是好像对于普通头文件  这句话能防止重复 包含。
     但我这里包含的是#import <msxml.dll> named_guids  好像和其他的普通头文件还是有区别的! 我也不是很明白 谢谢  关注!   代码 我发给薄荷了。  让他看看!
      

  14.   

    我查了半天也没找到什么问题,没什么时间了,我把附件传到网上了,大家帮帮看看吧
    http://bluebohe.go.nease.net/cxmlmanage.rar
    要安装msxml 的SDK
      

  15.   

    我找到 问题了! 薄荷::  我其中定义了几个全局变量  
    IXMLDOMDocumentPtr g_pXmlDoc = NULL;
    IXMLDOMElementPtr g_pXmlElement = NULL;IXMLDOMDocumentPtr g_pXmlDocRT = NULL;lpCMNCapResult g_CMNCapResult = NULL;
    lpCapResult g_lpCapResult = NULL;我把他们变成一个类成员变量 这个问题就没有了!  那位给说说为什么???
      

  16.   

    我已改好,不过另外一个问题,你在一个类的里面访问了static成员变量。我正在改这个问题。
      

  17.   

    如果是这样的话,那么这句:
    #import <msxml.dll> named_guids 
    可能再编译和链接阶段做了很多的事情。
    而我前面的方法是在预编译的阶段实现的代码重复包含的问题。
      

  18.   

    IXMLDOMDocumentPtr g_pXmlDoc = NULL;
    IXMLDOMElementPtr g_pXmlElement = NULL;IXMLDOMDocumentPtr g_pXmlDocRT = NULL;lpCMNCapResult g_CMNCapResult = NULL;
    lpCapResult g_lpCapResult = NULL;
    你在头文件中定义了,所以这时候就不是extern了,然后你又在CPP中定义了,所以就是重定义了。
      

  19.   

    CXmlControl::CXmlControl()
    {
    }这个里面最好不要访问static变量。要访问也要加个
    bool isfirst=true;再访问。
      

  20.   

    我改得自己都记不得了。
    在头文件的这个前面加上extern
      

  21.   

    sevencat(七猫) :: 非常感谢!   是重复定义一个变量  出现的问题!  一开始我得方向就出现了错误, 以为是 多次引入了一个头文件 !  惭愧呀!haha
      

  22.   

    sevencat(七猫) ::到这里 给点分意思意思 , 小鸟 没什么钱 呵呵!
    http://expert.csdn.net/Expert/topic/2606/2606840.xml?temp=.280697
      

  23.   

    sevencat(七猫)
    倒分的话可是要处理的哦!
      

  24.   

    sevencat(七猫):: 你要是倒分的话,可以给我的马甲倒点, 我马甲的id是bluebohe(薄荷)  小声点, 不要给大版主听到哟  哈哈!
      

  25.   

    处分?换个ID不就行了。假如这个ID被封,下次我就叫八猫了。
      

  26.   

    sevencat(七猫) 
    不是吧??分数代表了你在论坛的表现,还是有一定用处的不该接的分数坚决不接,但是该接的分数也不必错过,我是这么想的smartlife(tiro is my aim)
    不许说瞎话!!
      

  27.   

    在头文件的开始加上
    每个头文件加入:#ifndef __A_H_
    #define __A_H_
    ;
    #ifndef __B_H_
    #define __B_H_
    ;
    #ifndef __C_H_
    #define __C_H_
    在结尾加上
    #endif