【发布时间】:2015-11-15 18:53:56
【问题描述】:
当尝试通过范围和类型化枚举访问元组的值时,我收到一条错误消息,提示 std::get 没有匹配类型。
enum class User: std::size_t {
FirstName = 1,
LastName = 2,
};
std::tuple<std::string, std::string> user("Bobby", "Bean");
// Error
std::cout << std::get<User::FirstName>(user) << std::endl;
鉴于std::get 需要std::size_t 类型并且枚举的底层类型也是std::size_t,为什么会失败?
我知道我可以转换枚举的值,但我不确定为什么有必要这样做,因为这两种基础类型都是相同的。使用无范围的枚举,这工作得很好。
【问题讨论】:
-
它是强类型的——你必须明确地转换它。见this。
-
这是一个有趣的问题,但请不要只说“错误”。将完整的错误消息放入问题中。当您使用它时,您可以通过添加
int main和必要的#includes 让每个人的生活更轻松。目标是在不进行任何修改的情况下复制“粘贴”您的代码到本地或在线编辑器,并使用实际的编译器对其进行测试。 -
Xcode 没有给我更复杂的错误,它在我尝试编译之前突出显示。