Вызов неоднозначен, потому что код требует преобразования (индекс int
, а ваш operator[]
ожидает значение типа unsigned
), и, как говорится в сообщении об ошибке, существует несколько возможных преобразований. (Это было бы не так, если бы вы не указали оператор преобразования operator T*
.)
ошибка C2666: 'Array :: operator []': 4 перегрузки имеют похожие преобразования
может быть
- 'int & Array :: operator [] (без знака int)'
- 'const int & Array :: operator [] (без знака int) const'
- 'встроенный оператор C ++ [(const int *, int)'
- 'встроенный оператор C ++ [(int *, int)'
при попытке сопоставить список аргументов '(Array, int)' с [T = int]
Просто измените цикл for на использование индекса типа unsigned
, чтобы он мог выбрать правильную перегрузку.
for(unsigned i = 0; i != 20; ++i)
{
IntArray[i] = i;
}
Кстати, прямое преобразование в типы указателей обычно считается плохой идеей (TM), потому что он включает следующий синтаксис:
Array<int> array(20);
delete array;