Visual Studio 2017 生成工具与枚举类型的问题
Visual Studio 2017 Build tools issue with enum type
>我有非常简单的代码:
typedef long int32;
typedef unsigned long uint32;
enum Foo : int32 {
kE1 = 100
};
bool f(int32 i) {
return true;
}
bool f(uint32 i) {
return false;
}
int main()
{
int32 i32 = 8;
uint32 ui32 = 10;
f(i32);
f(ui32);
f(Foo::kE1);
return 0;
}
使用Visual Studio Build Tools 2017编译时,出现错误:
C:Program Files (x86)Microsoft Visual Studio2017BuildToolsVCToolsMSVC14.16.27023binHostX86x86CL.exe /c /Zi /nologo /W3 /WX- /diagnostics:classic /Od /Ob0 /Oy- /D WIN32
/D _WINDOWS /D "CMAKE_INTDIR="Debug"" /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++17 /Fo"cpp17.dirDebug\" /Fd"cpp17.dirDeb
ugvc141.pdb" /Gd /TP /analyze- /FC /errorReport:queue D:Worktestcpp17main.cpp
main.cpp
d:worktestcpp17main.cpp(24): error C2668: 'f': ambiguous call to overloaded function [D:Worktestcpp17buildcpp17.vcxproj]
d:worktestcpp17main.cpp(12): note: could be 'bool f(uint32)'
d:worktestcpp17main.cpp(8): note: or 'bool f(int32)'
d:worktestcpp17main.cpp(24): note: while trying to match the argument list '(Foo)'
Done Building Project "D:Worktestcpp17buildcpp17.vcxproj" (default targets) -- FAILED.
我不明白这是一个模棱两可的电话。枚举被清楚地标记为类型int32
(enum Foo : int32
(。
我在带有XCode的macOS上没有这个问题。
我做错了什么吗?这是Visual Studio构建工具的问题吗?
按照评论中的建议,我升级到Visual Studio Build Tools 2019,我确认它确实解决了这个问题。
作为旁注,我发现安装Visual Studio Build Tools 2019不知何故不适用于安装在我的系统上的旧版本的cmake。为了解决这个其他问题,我卸载了CMake
并将C:Program Files (x86)Microsoft Visual Studio2019BuildToolsCommon7IDECommonExtensionsMicrosoftCMakeCMakebin
添加到 Path 中。
相关文章:
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 如何注册枚举类型到QJSEngine,以便在脚本环境中使用?
- 通过包装器从 C 访问C++ API 时,如何访问枚举类型
- C++/错误:表达式必须具有整数或无作用域枚举类型
- 如何理解c++中在命名空间内部定义的枚举类型enum
- 在类访问混淆中声明的枚举类型
- 在枚举类型上使用std::max是不是一种糟糕的做法
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 是否可以使用泛型枚举类型作为函数的参数?
- Visual Studio 2017 生成工具与枚举类型的问题
- 使用枚举类型管理存储顺序
- 如何检查类中定义的枚举类型变量是否被分配给?
- 如何从枚举类型中获取枚举值?
- 为什么C++不为枚举类型提供默认"operator>>"函数?
- 确保枚举类型的键/值在软件Revs之间永远不会更改
- MSVC 1 位枚举类型等于 -1,并且相等性测试失败
- 我们可以专业化类模板的枚举(类型)成员吗?
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- 枚举类型的重载>>运算符(工作日)
- C 中的枚举类型字符串类别