Visual Studio 2017 生成工具与枚举类型的问题

Visual Studio 2017 Build tools issue with enum type

本文关键字:枚举 类型 问题 工具 Studio 2017 Visual      更新时间:2023-10-16

>我有非常简单的代码:

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 中。