系统文件comdef.h和Excel.h中,同时包含了Font与Pictures结构的定义,导致重复定义,如何避免啊

jx_lgq 2008-07-01 02:29:41
旧代码从VC6.0升级到VC2005,原来在VC6中正确,但到vc2005中编译时:
提示错误如下:
1>正在编译...
1>excel.cpp
1> Compiling MFC header files in release mode.
1>e:\arx(2005)\map\excel.h(1694) : error C2011: “Font”: “struct”类型重定义
1> c:\program files\microsoft visual studio 8\vc\include\comdef.h(310) : 参见“Font”的声明
1>e:\arx(2005)\map\excel.h(6659) : error C2011: “Picture”: “struct”类型重定义
1> c:\program files\microsoft visual studio 8\vc\include\comdef.h(324) : 参见“Picture”的声明



我认为是在系统文件comdef.h和Excel.h中,同时包含了Font与Pictures结构的定义,导致重复定义,检查能发现其有两处定义,
请教如何不会干扰或处理,如何避免啊
...全文
537 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
optim111 2010-06-06
  • 打赏
  • 举报
回复
这个问题怎么解决的啊?我也遇到了。
zhllxt 2010-03-30
  • 打赏
  • 举报
回复
我也是刚才搞这个东西,摸索了半天,总算解决了,原因如下:在VS2008(你的是2005估计差不多)的comdef.h文件中有这么两句:struct Font : IFontDisp {};和struct Picture : IPictureDisp {};结果导致老是出现你所说的冲突,但是VC6下就没问题,原因是VC6的comdef.h文件中没有上面的这两句定义,解决方法就是在excel9.h的#ifdef...#define...的后面(第一个class的前面)加上namespace excel9 { 再在最后加上结束符号 }

然后在excel9.cpp文件相应位置加上namespace excel9 { ...... }

在你的工作文件中#include "excel9.h" 并在下一行加上 using namespace excel9;

OK,完美解决。
aozhi 2008-07-01
  • 打赏
  • 举报
回复
#undef
gohan 2008-07-01
  • 打赏
  • 举报
回复
编译选项#pragma once应该也行
artman 2008-07-01
  • 打赏
  • 举报
回复
最好的办法,将自己的类名称全部替换.

命名空间, 处理起来可能会更麻烦.
  • 打赏
  • 举报
回复
namespace excel
{
#include <excel.h>
}
namespace comdef
{
#include<comdef.h>
}
然后用名字空间即可
xkyx_cn 2008-07-01
  • 打赏
  • 举报
回复
comdef.h放在excel.h前面
  • 打赏
  • 举报
回复
用ifndef试试!~
o(∩_∩)o...!~我对vc不熟哦!~
不行的话,别骂我,o(∩_∩)o...

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧