我写了一个类。这个类要用到 我写的另外3各类,
////在这个类的d.cpp中
#include "a.h"
#include "b.h"
#include "c.h"
但是现在在另外3各类的头文件中都要用到
#import <msxml.dll> named_guids
using namespace MSXML;
这样两句话(因为在三个类头文件中都用到了这种引入的类型)现在我编译d.cpp文件 就会出现重复定义的问题! 如何解决 ???
////在这个类的d.cpp中
#include "a.h"
#include "b.h"
#include "c.h"
但是现在在另外3各类的头文件中都要用到
#import <msxml.dll> named_guids
using namespace MSXML;
这样两句话(因为在三个类头文件中都用到了这种引入的类型)现在我编译d.cpp文件 就会出现重复定义的问题! 如何解决 ???
解决方案 »
- 将以下txt文件内容转成bin格式最简单的方法
- ¤¤¤请问如何建立一个Mpeg捕捉Firlter图表?¤¤¤
- 团结就是力量 我不认输 进者给分 免费放送经典的娱乐搞笑 各位兄弟姐妹 你们辛苦了 工作之余 记得休息哦
- 如何实现USB摄像头视频抓图
- 关于c2664的错误问题?
- [高分问题]我的VS.net为什么总是不停地重编译?
- 请li_zhifu (东北人)或shb80(不认输) 进来,有一个问题请教!
- Visual C++ 6.0在Windows XP安装时失败,无法正常安装Java 虚拟机?如何解决
- 如何得到LISTCTRL的当前选择?
- 串口读写是在同一个端口上操作么?
- 不知道的socket错误?
- 各位大虾帮帮忙!本人要做一个pppoe的登陆程序
#define __A_H_
...
...#endif
#import <msxml.dll> named_guids
using namespace MSXML;
写到CPP里。
每个头文件(A,B,C)包含m。h就行了。
#import <msxml.dll> named_guids我记得namespace是在本文件内有效的,使用要单独加入
using namespace MSXML;
global.h然后在这里面写上:
#import <msxml.dll> named_guids
using namespace MSXML;然后在a,b,c中加上#include "global.h"就可以了
你的方法实现和我直接加
#import <msxml.dll> named_guids
using namespace MSXML;
经过预编译之后 效果不是一样的吗? 我觉得不行
a.h中添加
#ifndef __A_H_//第一行
#define __A_H_
...
...#endif//最后一行aa.h中添加
#ifndef __AA_H_//第一行
#define __AA_H_
...
...#endif//最后一行
关键是把他:
#import <msxml.dll> named_guids
using namespace MSXML;
放在一个只会包含一次的文件中。比如stdafx.h ?
#undef _MSXML
#import <msxml.dll> named_guids
using namespace MSXML;
#enfif行吗,呵呵?
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.
我觉得一楼不正确,还是会重复定义的
关键是把他:
#import <msxml.dll> named_guids
using namespace MSXML;
放在一个只会包含一次的文件中。比如stdafx.h ?
//=========
agree
using namespace MSXML;上面两句话msxml的类型的导入
可以用其他方式实现吗??
就是去掉这两句话, 还能在所有的类头文件中使用这些导出类!
M。h文件用
#ifndef __M_H_
#define __M_H_#import <msxml.dll> named_guids...#endif
包起来。每个头文件(A,B,C)包含m。h就行了。这样是绝对没有重复包含的问题的。
请大家试了之后再否认我的观点。
如果还是重复包含,把代码贴出来。
#ifndef __M_H_
#define __M_H_
#endif但是好像对于普通头文件 这句话能防止重复 包含。
但我这里包含的是#import <msxml.dll> named_guids 好像和其他的普通头文件还是有区别的! 我也不是很明白 谢谢 关注! 代码 我发给薄荷了。 让他看看!
http://bluebohe.go.nease.net/cxmlmanage.rar
要安装msxml 的SDK
IXMLDOMDocumentPtr g_pXmlDoc = NULL;
IXMLDOMElementPtr g_pXmlElement = NULL;IXMLDOMDocumentPtr g_pXmlDocRT = NULL;lpCMNCapResult g_CMNCapResult = NULL;
lpCapResult g_lpCapResult = NULL;我把他们变成一个类成员变量 这个问题就没有了! 那位给说说为什么???
#import <msxml.dll> named_guids
可能再编译和链接阶段做了很多的事情。
而我前面的方法是在预编译的阶段实现的代码重复包含的问题。
IXMLDOMElementPtr g_pXmlElement = NULL;IXMLDOMDocumentPtr g_pXmlDocRT = NULL;lpCMNCapResult g_CMNCapResult = NULL;
lpCapResult g_lpCapResult = NULL;
你在头文件中定义了,所以这时候就不是extern了,然后你又在CPP中定义了,所以就是重定义了。
{
}这个里面最好不要访问static变量。要访问也要加个
bool isfirst=true;再访问。
在头文件的这个前面加上extern
http://expert.csdn.net/Expert/topic/2606/2606840.xml?temp=.280697
倒分的话可是要处理的哦!
不是吧??分数代表了你在论坛的表现,还是有一定用处的不该接的分数坚决不接,但是该接的分数也不必错过,我是这么想的smartlife(tiro is my aim)
不许说瞎话!!
每个头文件加入:#ifndef __A_H_
#define __A_H_
;
#ifndef __B_H_
#define __B_H_
;
#ifndef __C_H_
#define __C_H_
在结尾加上
#endif