在将 Windows 代码移植到 Linux 时,我在 GCC 4.2.3 中遇到了以下错误消息。(是的,我知道这是一个稍微旧的版本,但我不能轻易升级。)
main.cpp:16: error: call of overloaded ‘list(MyClass&)’ is ambiguous
/usr/include/c++/4.2/bits/stl_list.h:495: note: candidates are: std::list<_Tp, _Alloc>::list(const std::list<_Tp, _Alloc>&) [with _Tp = unsigned char, _Alloc = std::allocator<unsigned char>]
/usr/include/c++/4.2/bits/stl_list.h:484: note: std::list<_Tp, _Alloc>::list(size_t, const _Tp&, const _Alloc&) [with _Tp = unsigned char, _Alloc = std::allocator<unsigned char>]
我正在使用以下代码来生成此错误。
#include <list>
class MyClass
{
public:
MyClass(){}
operator std::list<unsigned char>() const { std::list<unsigned char> a; return a; }
operator unsigned char() const { unsigned char a; return a; }
};
int main()
{
MyClass a;
std::list<unsigned char> b = (std::list<unsigned char>)a;
return 0;
}
有没有人遇到过这个错误?更重要的是,如何绕过它?(当然,通过使用 等函数可以完全避免过载,GetChar()
但GetList()
我想避免这种情况。)
(顺便说一句,删除“ operator unsigned char()
”会删除错误。)