从友元函数内的对象访问成员函数

时间:2014-10-05 00:00:45

标签: c++ object operator-overloading const friend-function

以下代码是Distance类的一部分。 operator overload是一个声明为Distance类的私有成员的友元函数,我尝试调用的函数是一个公共成员。此函数不会更改Distance类的成员变量。

我试图保持两个按引用调用的对象d1和d2保持不变,但我的编译器说我通过调用ConvertToInches函数或位于距离类内的任何函数来违反它们的const属性,尽管这些函数不会更改Distance类中的私有变量。

当我不使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 个答案:

答案 0 :(得分:1)

问题是ConvertToInches方法没有声明为const,并且你试图在const Distance& amp;上调用方法。宾语。一个简单的解决方法是将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那样的const引用。