c – 重载’operator’必须是一元或二元运算符(有3个参数)
发布时间:2020-12-14 19:05:04 所属栏目:百科 来源:网络整理
导读:我有一个头文件和一个.cpp文件.我试图实现前缀和后缀运算符重载,但我在设置重载时不断收到此错误. fraction.h #ifndef FRACTION_H#define FRACTION_H#include iostreamusing namespace std;class Fraction { public: Fraction(); Fraction(int,int); int get
我有一个头文件和一个.cpp文件.我试图实现前缀和后缀运算符重载,但我在设置重载时不断收到此错误.
fraction.h #ifndef FRACTION_H #define FRACTION_H #include <iostream> using namespace std; class Fraction { public: Fraction(); Fraction(int,int); int getTop() {return m_top;} int getBottom() {return m_bottom;} void set(int t,int b) {m_top=t; m_bottom=b; reduce(); } protected: private: void reduce(); int gcf(int,int); int m_top; int m_bottom; }; Fraction& operator ++ (Fraction); Fraction operator++(Fraction,int); #endif Main.cpp的 #include <iostream> using namespace std; #include "fraction.h" int main { cout << "The fraction is" << f; cout << "The output of ++f is " << (++f) << endl; cout << "The fraction is" << f; cout << "The output of f++ is " << (f++) << endl; cout << "The fraction is" << f; return 0; } Fraction& Fraction::operator ++ (Fraction){ // Increment prefix m_top += m_bottom; return *this; } Fraction Fraction::operator ++ (Fraction,int){ //Increment postfix } 这是我得到的两个错误: prefix error: "Parameter of overloaded post-increment operator must have type 'int' (not 'Fraction')" postfix error: "Overloaded 'Operator++' must be a unary or binary operator (has 3 parameters)" 前缀错误实际上是我的ide错误吗?我知道后增量必须是’int’,但我试图做一个预增量.我用xcode. 解决方法
您将类外的运算符声明为非类函数
Fraction& operator ++ (Fraction); Fraction operator++(Fraction,int); 然而,你试图像类成员函数一样定义它们 Fraction& Fraction::operator ++ (Fraction){ // Increment prefix m_top += m_bottom; return *this; } Fraction Fraction::operator ++ (Fraction,int){ //Increment postfix } 通过以下方式将它们声明为类成员函数 class Fraction { public: Fraction & operator ++(); Fraction operator ++( int ); //... 在这种情况下,例如preincrement运算符的定义可能看起来像 Fraction & Fraction::operator ++(){ // Increment prefix m_top += m_bottom; return *this; } 或者将它们声明为非类函数,它们是类的朋友,因为它们需要访问类的私有数据成员 class Fraction { public: friend Fraction & operator ++( Fraction & ); friend Fraction operator ++( Fraction &,int ); //... 在这种情况下,例如preincrement运算符的定义可能看起来像 Fraction & operator ++( Fraction &f ){ // Increment prefix f.m_top += f.m_bottom; return f; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |