Взгляните на свои операторы индексации:
T operator [] (const size_t& i) { return m_coords[i]; }
T operator [] (const size_t& i) const { return m_coords[i]; }
Единственное различие между ними состоит в том, что один вызывается для константных объектов, и возникает вопрос, почему вы их вообще дублировали.
Это легко ответить, хотя:
Оба должны возвращать ссылки, последний const
-качественный, чтобы избежать копий и разрешить изменение для первого.
Исправьте это как первый шаг к устранению вашей ошибки .
В качестве второго шага следует признать, что this
был введен до того, как ссылки существовали, и, таким образом, является указателем на экземпляр, а не ссылкой таким образом, this[n]
является указателем-арифметикой c, не вызывая ваш пользовательский оператор индексации. К счастью, это приводит к другому типу и, следовательно, к ошибке разрешения перегрузки.