У меня есть класс массива шаблонов, перегружающий как operator []
для доступа к элементам, так и operator T *
, чтобы получить прямой доступ к буферам.Ошибка компиляции C++, неоднозначные перегрузки операторов
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? Спасибо. :)
EDIT: На самом деле это: buf[ some_position ] = 0; // Generates an error
Вы можете написать точное сообщение об ошибке? – Petr
@Petr Я добавил. – Virus721
Пожалуйста, разместите сообщение об ошибке _full_, включая все перегруженные списки и любые другие связанные заметки, сгенерированные компилятором. – Petr