gpt4 book ai didi

c++ - 错误 "Call to constructor of ' ' is ambiguous",尽管类的构造函数参数看起来不一样?

转载 作者:行者123 更新时间:2023-12-01 14:05:05 34 4
gpt4 key购买 nike

出现错误信息 Call to constructor of 'Binary' is ambiguous ,该错误消息仅在使用 LLVM 时出现macOS 上的编译器,但在 Windows 上,它不会出现。
此外,类的构造函数参数看起来也不一样。

class Binary {
public:
Binary() = default;
Binary(uintmax_t containerSize);
Binary(unsigned char binary);
Binary(std::initializer_list<unsigned char> binaryList);
// .....
};

// When using
// fileSize is `std::streamoff` data type
Binary fileContent((unsigned long long)fileSize) // << This line is causing the problem.
我的课怎么了?

最佳答案

uintmax_t是您机器上最大宽度无符号整数类型的 typedef。编译代码时,如果该类型不完全是 unsigned long long ,然后这个电话:

Binary fileContent((unsigned long long)fileSize); 
是模棱两可的,因为参数需要经过一次转换才能匹配以下任一构造函数:
Binary(uintmax_t containerSize); // conversion from unsigned long long to uintmax_t needed
Binary(unsigned char binary); // conversion from unsigned long long to unsigned char needed
并且编译器无法在它们之间进行选择,并且出现错误。
uintmax_t恰好是 unsigned long long ,那么第一个构造函数是完全匹配的,并被选中,然后程序编译。据推测,这就是您看到的 macOS 和 Windows 编译器版本之间的区别。

关于c++ - 错误 "Call to constructor of ' ' is ambiguous",尽管类的构造函数参数看起来不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63258000/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com