Доступ к функции-члену из объекта внутри функции-друга
Код ниже является частью класса Distance. Перегрузка оператора является функцией-другом, объявленной как закрытый член класса Distance, а функция, которую я пытаюсь вызвать, является открытой. Эта функция не изменяет переменные-члены класса Distance.
Я пытаюсь сохранить два объекта вызова по ссылке постоянными, но мой компилятор говорит, что я нарушаю их свойство const, вызывая функцию ConvertToInches или любую функцию, расположенную внутри класса расстояния, несмотря на то, что эти функции не изменяют частные переменные в пределах класса расстояния.
У компилятора нет проблем, когда я не устанавливаю d1 и d2 постоянными.
Может кто-нибудь объяснить, как сделать d1 и d2 постоянными при вызове этой функции и почему то, что у меня не работает?
Спасибо!
const Distance operator+(const Distance& d1, const Distance d2)
//this is a friend function
//declared in private section of Distance class
{
//this function is what causes problems !!!!!!!
d1.ConvertToInches(1, 2, 3, 4);
Distance d3 = 3;
return d3;
}
Distance::ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches)
//declared in public section of Distance class
{
cMiles = cMiles * 63360;
cYards = cYards *36;
cFeet = cFeet * 12;
int cSum = cMiles + cYards + cFeet + cInches;
return cSum;
}
1 ответ
Проблема в том, что метод ConvertToInches не объявлен как const, и вы пытаетесь вызвать методы для const Distance& object. Простое исправление заключается в добавлении const к объявлению и определению функции:
class Distance
{
public:
int ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches) const;
};
int Distance::ConvertToInches(const int cMiles, const int cYards, const int cFeet, const int cInches) const { /* ... */ }
Еще одна небольшая проблема с вашим фрагментом кода: d2 не является константной ссылкой, как d1.