Возвращая ссылку, вы говорите, что можете изменить элемент данных класса, на который косвенно указывает ссылочная переменная, и, следовательно, изменить класс ... но вы выделили метод класса как постоянный метод, то естьне разрешается изменять любые переменные-члены класса, которые не были специально объявлены как изменяемые.Таким образом, возвращая непостоянную ссылку, вы нарушаете «контракт» инкапсуляции, установленный интерфейсом класса.Вы можете либо вернуть временный объект (т. Е. Который создает копию объекта), либо постоянную ссылку.Таким образом, вы можете сделать
const string& getName() const {return m_first;}
или
string getName() const { return m_first; } //copies m_first and returns the copy