【发布时间】:2015-06-19 14:11:44
【问题描述】:
我有一个模板数组类重载operator [] 以访问项目和operator T * 以获取直接缓冲区访问。
template< typename T > class buffer
{
const T & operator [] ( size_t ) const;
T & operator [] ( size_t );
operator const T * () const;
operator T * ();
};
由于某种原因,在此类的实例上使用 operator [] 会生成一个编译错误,指出有 4 种可能的重载。
buffer< int > buf;
buf[ some_position ] = 0; // Generates an error
错误:
Error 3 error C2666: 'XXX::buffer<T>::operator []' : 4 overloads have similar conversions c:\XXX.cpp 3886
operator [] 是否试图将我的实例 buf 转换为 T * ?为什么检测到 4 个重载而不是 2 个?谢谢你。 :)
编辑:
其实是:buf[ some_position ] = 0; // Generates an error
【问题讨论】:
-
你能发布确切的错误信息吗?
-
@Petr 我已经添加了。
-
请发布完整错误消息,包括它列出的所有重载以及编译器生成的任何其他相关说明。
-
这是完整的错误信息。我正在使用 Visual Studio 2005。
-
它解释了here 为什么你会得到你的错误。查看底部的编译信息部分。
标签: c++ class operator-overloading ambiguous