以下代码是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;
}
答案 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引用。