以下代码是Distance类的一部分。运算符重载是一个朋友函数,声明为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;
}
我不知道为什么@CIsForCoocckies删除了答案:根据你的'ConvertToInches'声明,它是一个非const成员函数。这些可能不会被称为'const'对象,例如朋友'operator +'的参数。 – dyp 2014-10-05 01:06:47
或者'ConvertToInches'是一个'static'成员函数吗? (从你所展示的代码片段中不清楚)在任何情况下,如果它不访问任何数据成员或'Distance'的私有成员,那么没有理由为什么它应该是成员函数,静态的。 – dyp 2014-10-05 01:12:08