Friend函数和未定义的私有方法
Friend Functions and Undefined Private Methods
我一直在开发一个涉及运算符重载和友元函数的练习程序(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_。
相关文章:
- 在C++中使用内联方法时出现未定义的符号错误
- 对结构方法的未定义引用
- 对使用 CMake 生成为 lib .a 的方法的未定义引用
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 对纯抽象类中方法的未定义引用
- G++ 编译器未为未定义的方法生成错误/警告
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- C++CTRL+C处理程序有未定义的行为
- 我对C++程序有一个未定义的参考,不知道如何处理它
- mac构建有一个未定义的符号,而linux构建并没有用于相同的代码
- 为什么我有一个未定义的对友元函数的引用
- 为什么有错误未定义_getws_s
- 编译器说模板类中的方法未定义,除非我将其设为虚拟
- LoopFillZerobss对main有一个未定义的引用
- 休斯顿,我们有一个未定义的参考
- g++说我对一个函数有一个未定义的引用
- .cpp文件中模板类的非模板方法-未定义的引用
- qt creator中有很多未定义的引用
- 是否有任何未定义的行为问题,当移动数据到一个函数,然后回到它来自哪里
- RapidXML打印头有未定义的方法