- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近从 Visual Studio 2010 切换到 Visual Studio 2012。我正在处理的项目使用 BitwiseEnums来自 MiLi 的图书馆.我按照说明只包含 BitwiseEnums 库 here ,所以唯一添加到我的项目的文件是 bitwise_enums.h .
在 VS2010 中我没有遇到任何问题。在 VS2012 中,每当我 #include bitwise_enums.h 并尝试编译时,我都会收到以下错误消息:
1>c:\program files (x86)\windows kits\8.0\include\um\oaidl.h(319):
error C2057: expected constant expression
当我检查项目的外部依赖项时,它会列出文件 oaidl.h。查看此文件,我发现以下语句在第 319 行结束。
typedef /* [v1_enum] */
enum tagSF_TYPE
{
SF_ERROR = VT_ERROR,
SF_I1 = VT_I1,
SF_I2 = VT_I2,
SF_I4 = VT_I4,
SF_I8 = VT_I8,
SF_BSTR = VT_BSTR,
SF_UNKNOWN = VT_UNKNOWN,
SF_DISPATCH = VT_DISPATCH,
SF_VARIANT = VT_VARIANT,
SF_RECORD = VT_RECORD,
SF_HAVEIID = ( VT_UNKNOWN | VT_RESERVED )
} SF_TYPE; // Line 319
我的问题是:
最佳答案
我已经设法将其缩小到 bitwise_enums.h 和 Windows.h 之间的某种命名冲突,我也将其包含在项目中。我注意到,如果我包含整个 MiLi 库,我不会收到错误消息,因为 mili.h 使用 #define NAMESPACE_BEGIN
和 #define NAMESPACE_END
将所有内容放在命名空间中,而按照建议的方式定义它们 here , 意味着 bitwise_enums.h 的内容最终会污染全局命名空间。我仍然不完全清楚为什么这会导致问题,因为我似乎无法找到冲突,也不清楚它为什么在 VS2010 中起作用。但是,我能够通过更改 #define 指令来解决它,以便它们在 bitwise_enums.h 中创建一个命名空间:
#define NAMESPACE_BEGIN namespace Mili
#define NAMESPACE_END }
#include <bitwise_enums.h>
#undef NAMESPACE_BEGIN
#undef NAMESPACE_END
另一种解决方案是包含 mili.h 并遵循 second suggestion at this link ,但由于我只需要一个库,所以我不想单独使用很多行来排除我不需要的库。
如果将来有人遇到和我一样晦涩难懂的情况,使用从 MiLi 中包含单个库的特定方法,同时在 VS2012 中包含 Windows.h(可能是不太可能的组合),希望这个答案会有用!
关于c++ - oaidl.h(319) : error C2057: expected constant expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827599/
默认的 ATL 简单对象在其 IDL 文件的顶部具有以下内容: import "oaidl.idl"; import "ocidl.idl"; 这些文件有什么用,我怎么知道什么时候需要导入它们?是否有
我正在尝试移植我在 Windows 中开发的 c++ dll,它广泛使用 Variant (ole/com) 类型结构(请参阅 https://msdn.microsoft.com/en-us/lib
我最近从 Visual Studio 2010 切换到 Visual Studio 2012。我正在处理的项目使用 BitwiseEnums来自 MiLi 的图书馆.我按照说明只包含 BitwiseE
我是一名优秀的程序员,十分优秀!