Доступ к функции-члену из объекта внутри функции-друга

Код ниже является частью класса 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.

Другие вопросы по тегам