1

下面的代码是距离类的一部分。运算符重载是一个友元函数,声明为 Distance 类的私有成员,而我尝试调用的函数是公共成员。此函数不会更改 Distance 类的成员变量。

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

当我不使 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;
}
4

1 回答 1

1

问题是 ConvertToInches 方法未声明为 const,而您正试图在 const Distance& 对象上调用方法。一个简单的解决方法是将 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 引用。

于 2014-10-05T01:35:11.497 回答