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