我正在使用 VS 2010 Ultimate。工具集 v90。
我有一个 DLL 和一个静态链接到 DLL 的测试项目。DLL 内部是一个名为 IFilter 的导出类。这个接口类被包装在一个命名空间中,该类的用法使用命名空间明确说明,例如 void DoSomethingWithDLLTypes( const Observer::IFilter &);
几个月来一切都运行良好,然而,随着最近在 DLL 项目之外的更改,我开始引入新文件。当我将这些文件添加到解决方案中时,使用每个添加到测试进行重建,一切都运行良好,然后突然我收到了这个错误。
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\Filter.h(53): 警告 C4099: 'Observer::IFilter' : type name first seen using 'class' now see using 'struct' d: \proj\pub\h\IFilter.h(12) : 参见 'Observer::IFilter' C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\Filter.h(183) 的声明:错误 C2371: 'IFilter':重新定义;不同的基本类型 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\Filter.h(53) :参见“IFilter”声明
最初 IFilter 没有包装在命名空间中,所以我必须检查所有文件(认为这会解决它)并将所有内容包装在命名空间中。现在,DLL 编译得很好,但是,我在测试项目中仍然遇到同样的错误。我什至不知道如何/为什么包含来自 MS SDK 的 IFilter/Filter.h。
测试项目使用预编译的头文件,但是,它没有使用 Windows.h,无论哪种方式,我都继续并在那里“只是为了确定”做了 #define lean_and_mean 宏,没有任何帮助。