描述:
我在一个对话框工程中引用一个ATL的接口类,如果把这个ATL的接口类引用#include "VzFwImport.h"
#include "VzFwImport_i.c"放到TestVzFwImportDlg.h中就会出现以下错误:
Compiling...
TestVzFwImport.cpp
Generating Code...
Linking...
TestVzFwImportDlg.obj : error LNK2005: _CLSID_FileImport already defined in TestVzFwImport.obj
TestVzFwImportDlg.obj : error LNK2005: _LIBID_VzFwImportLib already defined in TestVzFwImport.obj
TestVzFwImportDlg.obj : error LNK2005: _IID_IFileImport already defined in TestVzFwImport.obj
而把#include "VzFwImport.h"
#include "VzFwImport_i.c"放到TestVzFwImportDlg.c中就不会有这样的问题,并且我发现,有的例子程序把类似的ATL接口类头文件引用放到例程的头文件中就没有问题,是不是我的编译器设置有什么问题呢?
解决方案1:
循环引用了。比如说,a.h引用了b.h,c.h同时引用a.h和b.h,则c.h中就有两份b.h,造成了对b.h中定义的变量的循环引用。
解决方案2: 注意在头中加上
#ifndef XXX
#define XXX
....
#endif
经过上面的处理可以一定程度上避免类似问题。
最好不要把代码实现放到.h文件中。
您可能想查找下面的文章:
- 很是奇怪,怎么就没有人能解决我提的问题呢?是我提的问题真的有难度还是没有高手?-----???
- [奇怪的问题!],郁闷ing!想清理word的打开文件的历史记录,通过code,自己写了点code结果没有生效!大牛们给点建议!或者解决方案!
- 有谁用过WTL的属性表类CPropertySheetImpl创建向导对话框--我碰到奇怪的问题
- 在dll中向主程序的主框架窗口停靠一个CControlBar窗口的奇怪现象一问?
- 十分奇怪的问题,想了半天,大家来瞧下,分不够再加
- 奇怪:成功激活也能成功调用,为什么queryinterface查询第二个接口报告“拒绝访问”?
- 有一个很奇怪的控件问题:它是一个COM,在VB6中引用后,再用withevents来定义可以接收到事件,但在IE中无论如何都触发不了事件。
- 请问:VC+MATCOM编译后的程序在运行时出现奇怪运算出错(tothematrixtemporary)
- 奇怪问题,在VC++中IE的父子窗口中的BHO中的变量居然互相影响,而用C#编的就正常。。请帮忙???
- 用CComBSTR的奇怪问题?