У меня есть шаблон класса, который содержит вектор T в качестве защищенной переменной-члена.Я хочу перегрузить operator (), чтобы он возвращал ссылку на элемент вектора в строке y и столбце x.
Когда я объявляю функцию operator () как:
template <class T>
T & ArrayT<T>::operator()(unsigned int x, unsigned int y)const{
return buffer[y*width + x];
}
, я получаю ошибку C2440: «возврат»: невозможно преобразовать из «const_Ty» в «T &»
Если я объявляю функцию оператора как:
template <class T>
const T & ArrayT<T>::operator()(unsigned int x, unsigned int y)const{
return buffer[y*width + x];
}
, тогда мой код компилируется, но если, например, я создаю производный хранимый класс, где T - это float, а я пишу (obj - это объект производного класса с членомпеременный вектор чисел с плавающей точкой):
float f=obj(i,j);
f=pow(f,2);
тогда ничего не происходит.Поплавок в позиции i, j внутри вектора не изменяется, поэтому предположим, что я действительно не работаю со ссылкой, потому что, если оператор () вернул ссылку, вышеприведенные строки должны изменить элемент в позиции (i, j)верно?
Я новичок в c ++, и я понимаю, что, возможно, я делаю здесь некоторые очень глупые ошибки, но, пожалуйста, любая помощь будет приветствоваться.