【问题标题】:accessing member function from an object inside a friend function从友元函数内的对象访问成员函数
【发布时间】:2014-10-05 00:00:45
【问题描述】:

下面的代码是距离类的一部分。运算符重载是一个友元函数,声明为 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 对象上调用,例如朋友operator+ 的参数。
  • 或者,ConvertToInchesstatic 成员函数吗? (从您显示的 sn-p 中不清楚)无论如何,如果它不访问 Distance 的任何数据成员或私有成员,那么它没有理由应该是成员函数,静态或非静态。

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


【解决方案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 { /* ... */ }

您的代码 sn-p 的另一个小问题:d2 不像 d1 那样是 const 引用。

【讨论】:

  • 谢谢,这太完美了!
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多