我在Visual Studio中设置了一个项目来创建.dll。我在项目中包含了一个使用关键字“interface”的外部库。这给了我以下错误:
错误C2146:语法错误:缺少';'在标识符'INuiAudioBeam'之前
这些是发生错误的代码行:
#ifndef __INuiAudioBeam_FWD_DEFINED__
#define __INuiAudioBeam_FWD_DEFINED__
typedef interface INuiAudioBeam INuiAudioBeam; //Error on this line
#endif
上面的代码是我包含的外部库中头文件的一部分。在编译时,项目构建成功,没有任何错误,但不包括库的标题(注意:链接库不会导致任何问题)。
这是什么解决方案?是因为我有一个外部库我用来创建我的DLL?我应该创建.lib而不是dll吗?
答案 0 :(得分:3)
如果其他人搜索此内容,问题很可能是
#define WIN32_LEAN_AND_MEAN
在
#include <windows.h>
删除define,确保包括windows.h,并且应该为你定义interface关键字
答案 1 :(得分:1)
您可以通过对interface关键字的起诉获得C2146。关于如何定义一个关键字可能会让人感到困惑,特别是在使用相同头文件的其他编译单元或项目中 - 包含导致问题的关键 - 一切顺利。但是,明显的关键字“interface”仍然是编译器#define指令。它恰好被隐藏在头文件中,少数开发人员有理由检查:<objbase.h>
。它有两个步骤:
#define __STRUCT__ struct
#define interface __STRUCT__
由于<objbase.h>
包含在多个其他头文件中 - 例如ole2.h,oleauto.h和一系列ATL标题 - 当这些标题中没有包含这些标题时,您可能会对此感到惊讶当前的编译单元。