所以我有一个LongInt类,它将为+和*运算符提供新的定义。头文件中的初始化如下所示:
friend LongInt operator+(const LongInt& x, const LongInt& y);
friend LongInt operator*(const LongInt& x, const LongInt& y);
但是在我的实现文件中,我在定义标题中找到的方法时,VS无法识别标题中列出的operator +函数或operator *函数。我正在使用代码:
friend LongInt LongInt::operator+(const LongInt& x, const LongInt& y)
{
}
和
friend LongInt LongInt::operator*(const LongInt& x, const LongInt& y)
{
}
当我试图定义运算符时,有什么想法为什么这段代码不起作用?
答案 0 :(得分:2)
friend
关键字仅在声明或定义类内的运算符时使用;当将运算符声明为类的friend
并在其他地方定义它时,friend
仅用于声明,而不是定义。此外,在类中声明为friend
的函数实际上是命名空间范围内的自由函数,而不是类成员。所以,你的定义看起来应该更像:
LongInt operator +(LongInt const& x, LongInt const& y) { /*...*/ }
LongInt operator *(LongInt const& x, LongInt const& y) { /*...*/ }
如需进一步阅读材料,请阅读以下页面:C++ FAQ: Friends
答案 1 :(得分:0)
你覆盖了一个操作员......你用操作员“调用”它:
LongInt foo;
LongInt bar;
LongInt foobar = foo + bar;