朋友功能和未定义的私有方法

时间:2015-04-02 04:13:45

标签: c++ function friend

我一直在研究涉及运算符重载和友元函数的练习程序(C ++) - 这些朋友函数之一( ostream& operator<<(ostream& out,const rational& robj ))在类'rational'中访问(或应该访问)私有成员函数 GCD()。定义GCD()函数结果不错,但是前面提到的友元函数给我一个问题,因为当我引用GCD()时,我的IDE将其标记为错误,称私有函数未被识别。我认为这是一个功能标题放置等问题,但这让我绝对感到困惑。以下是我的代码的链接:

http://pastebin.com/NetfQHY1

非常欢迎任何帮助!非常感谢你们! :)

2 个答案:

答案 0 :(得分:0)

听起来你需要forward declaration。确保在需要调用它的代码之前有私有函数的声明。所以除了函数的实际定义之外,你还会有这个前向声明

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

如需进一步阅读,请查看此其他stackoverflow帖子:C++ Forward Declaration

答案 1 :(得分:0)

在您提供的代码中,您的问题似乎是您尝试将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;

...因为您的rational参数已标记为const