Friend函数和未定义的私有方法

Friend Functions and Undefined Private Methods

本文关键字:有方法 未定义 函数 Friend      更新时间:2023-10-16

我一直在开发一个涉及运算符重载和友元函数的练习程序(C++),其中一个友元函数(ostream&operator<<(ostream&out,const rational&robj))访问(或应该访问)类"rational"中的私有成员函数GCD()。定义GCD()函数是可以的,但正是前面提到的朋友函数给了我一个问题,因为当我引用GCD(。我认为这是函数头之类的位置问题,但这让我感到非常困惑。下面是我的代码链接:

http://pastebin.com/NetfQHY1

非常欢迎任何帮助!非常感谢大家!:)

听起来您需要一个正向声明。请确保在需要调用它的代码之前有一个私有函数的声明。因此,除了函数的实际定义之外,您还需要这个正向声明

您可能需要为此使用头文件–;这取决于调用者是否在不同的源文件中。如果是这样的话,您可以将forward声明放在头文件中,然后将该头文件包括在使用该函数的所有其他文件中。

如需进一步阅读,请查看另一篇stackoverflow文章:C++Forward Declaration。

在您提供的代码中,您的问题似乎是试图将GCD作为一个独立函数调用。然而,您将其定义为一个方法——一个旨在对对象调用的函数。

因此,为了调用GCD,您必须这样做:

rationalInstance.GCD();

由于operator<<的实现是一个独立的函数,因此您不能这样做:

GCD();

与相同

this->GCD();

在独立函数的上下文中没有this的概念。

考虑到你对operator<<的定义,我认为这可能是你想要的:

ostream& operator<<(ostream &out, const rational &robj)
{
    int divisor = robj.GCD();
}

然而,为了编译它,您可能需要更新GCD的定义/声明,以表明它不会修改对象:

int rational::GCD() const;

因为您的CCD_ 7参数被标记为CCD_。