下面的代码是 Distance 类的一部分。运算符重载是声明为 Distance 类的私有(private)成员的友元函数,而我尝试调用的函数是公共(public)成员。该函数不改变Distance类的成员变量。
我试图保持两个按引用调用对象 d1 和 d2 不变,但我的编译器说我通过调用 ConvertToInches 函数或位于距离类内的任何函数违反了它们的 const 属性,尽管这些函数不是更改 Distance 类中的私有(private)变量。
当我不使 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;
}
最佳答案
问题是 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 引用。
关于c++ - 从友元函数中的对象访问成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198335/