В этом проблема. Я написал эту функцию, чтобы вернуть ссылку на элемент i вектора-члена, чтобы этот элемент можно было отредактировать. Вот код:Как написать конструктор const, который возвращает ссылку на объект-член, поэтому он может быть отредактирован?
Letter& Literal::get (int i) const {
return lit_m.at (i); //Vector of Letter objects
}
Но г ++ не позволит мне назначить этот элемент неконстантного ссылки:
g++ -o literal.o -c literal.cpp
literal.cpp: In member function ‘Letter& Literal::get(int) const’:
literal.cpp:34: error: invalid initialization of reference of type ‘Letter&’ from expression of type ‘const Letter’
Как это могло быть решена? Моя идея состоит в том, чтобы создать такую функцию, как функция at() векторов, поэтому она будет const, поскольку она не редактирует сам объект, но она должна позволить мне редактировать возвращаемый объект ... Возможно ли это?
SOLVED: Мне просто нужно было перегрузить функцию :), поэтому объявите const и неконстантную версию. Я боялся, что const и non-const перегрузка не была разрешена, но я увидел, что это const изменяет список аргументов, что делает возможным.
Фактически вы дали ему решение. Пока указатель никогда не будет NULL, вы можете разыменовать его. – CashCow
Я не был уверен, действительно ли это было, потому что я думал, что это был метод const, он, вероятно, фактически вернул бы либо «Letter * const», либо «const Letter *», а во втором случае он был бы в том же как и раньше. – Anthony