Ошибка C2676 бинарная '[': 'collection :: item' не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора
это потому что
item array = new item[top];
должно быть
item * array = new item[top];
но вы также должны переместить инициализацию в конструкторе, когда top имеет значение
Из этого лучше, если бы конструктор collection(int top)
получил значение без знака, равное collection(unsigned top)
или лучше collection(size_t top)
Копировать contructor, operator = ... отсутствуют, а атрибут является указателем
Как насчет проверки допустимости i в collection& operator[](unsigned int i)
и void addvar(int i, T1 item, T2 key)
для получения исключения, когда оно недопустимо? addvar - также странное имя, потому что это set , add означает, что размер увеличен. Вы не можете получить доступ к элементу в экземпляре const, добавьте const collection& operator[](unsigned int i) const
В void extendarray()
удвоение размера мало что даст, если начальный размер равен 0; -)