から鋳造、私はGCC 4.2.3で、次のエラーメッセージに遭遇しました。 (はい、私はそれが若干古いバージョンだと認識してんだけど、私は簡単にアップグレードすることはできません。)C++演算子のオーバーロード - LinuxへのWindowsコードを移植しながらクラス
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()
」を削除するとエラーが削除されます。)
なぜそうですか?私は、あなたが暗黙にオーバーロードされたキャストを呼び出すことができるという事実を知っています。 –
申し訳ありませんが、明示的にお電話ください。 –
実際にはわかりませんが、あなたが明示的に演算子を使用したいと言っているのではないかと思いますが、最初に標準演算子を使用してconst演算子を使用している可能性がありますが、 const&と競合しますが、実際はわかりません。 –