C++ 分数类。重载运算符?

标签 c++ operators operator-overloading

我正在为一个学校项目制作一个分数类,我的大脑在燃烧。我被告知要通过 friend 关键字重载 << 和 >> 运算符。但是我为此遇到了错误。

我在这里发布了相关代码:http://pastebin.com/NgCABGJ2

错误包括:错误 C2270:“<<”:非成员函数不允许使用修饰符(此错误适用于所有声明为友元的函数)

这是在 operator< 定义中。 error C2333: 'Fraction::operator <': 函数声明错误;跳过函数体

总共有 46 个......这是一场噩梦。

编辑:

谢谢,我解决了几乎所有的错误,但是还有3个

错误 C2664:“Fraction::Fraction(const Fraction &)”:无法将参数 1 从“int”转换为“const Fraction &” 发生在这个声明中:

Fraction<int> test1, test2, test3(10);

错误 C2248:“Fraction::operator ==”:无法访问类“Fraction”中声明的私有(private)成员 error C2248:“Fraction::operator <”:无法访问类“Fraction”中声明的私有(private)成员

我不明白这两个,但它发生在这些语句中:

    if (test1 == test2)
    cout << "\nTest1 is equal to Test2";
if (test1 < test2)
    cout << "\nTest1 is less than Test2";

谢谢!

<><>>EDIT2<<><>

我修复了其他私有(private)访问错误,但现在我有一些非常奇怪的错误:

完整代码:http://pastebin.com/MVrB67SR

错误:

错误 1 ​​error LNK2001: 未解析的外部符号“class Fraction __cdecl operator-(class Fraction const &,class Fraction const &)” (??G@YA?AV?$Fraction@H@@ABV0@0@Z) 错误2 error LNK2001: 未解析的外部符号“class Fraction __cdecl operator+(class Fraction const &,class Fraction const &)” (??H@YA?AV?$Fraction@H@@ABV0@0@Z) 错误3 error LNK2001: 未解析的外部符号“class Fraction __cdecl operator/(class Fraction const &,class Fraction const &)” (??K@YA?AV?$Fraction@H@@ABV0@0@Z) c:\Users\caleb jares\documents\visual studio 2010\Projects\Solution11-5\Solution11-5\Solution11-5.obj 错误4错误LNK2001:未解析的外部符号“class Fraction __cdecl operator*(class Fraction const &,class Fraction const &)”(??D@YA?AV?$Fraction@H@@ABV0@0@Z) 错误5 error LNK2001: 未解析的外部符号“class std::basic_ostream > & __cdecl operator<<(class std::basic_ostream > const &,class Fraction)” (??6@YAAAV?$basic_ostream@DU?$char_traits@D @std@@@std@@ABV01@V?$Fraction@H@@@Z) 错误6 error LNK2001: 未解析的外部符号“class std::basic_istream > & __cdecl operator>>(class std::basic_istream > const &,class Fraction)” (??5@YAAAV?$basic_istream@DU?$char_traits@D @std@@@std@@ABV01@V?$Fraction@H@@@Z) 错误7 error LNK1120: 6 unresolved externals

再次感谢您的帮助!

最佳答案

听起来你试图声明 friend ostream &operator<<(…) const; .关于 friend 的重要事项s 是他们不是成员friend函数存在于类的范围之外,即使它是在 class {} 内部定义的堵塞。换句话说,您正在声明一个函数 ::operator<<() , 不是 fraction::operator<<() .而且只有成员函数可以有尾随 const , 因为它修改了 this 的类型.

事实是,operator<<对于输出通常不应该是 friend 。它只是获取值并将其转发到流……这不需要任何特殊许可!同样适用于 operator< .

将函数完全放在类 block 之外。你的助教不可能使用 friend 提示你的设计不经常。

关于C++ 分数类。重载运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878083/

相关文章:

c++ - Windows 消息循环

c++ - 常量全局变量模板

python - Python有三元条件运算符吗?

c++ - 如何在 C++ 中使用 << 将 unsigned/signed char 或 <cstdint> 类型输出为整数

c++ - 使用 STL 在 C++ 中实现 Bin 打包

c++ - 使用 n 维 C++ Vector 类实现算术运算符重载的更好方法?

c++ - 无法定义我自己的运算符......

php - IF 语句中值之前或之后的变量

c++ - 重载 operator new - 误导性输出

c# - c# 中的 "operator true"是否正好有两个可以使用的地方?