私はヘッダファイルと.cppファイルを持っています。接頭辞と後置演算子のオーバーロードを実装しようとしていますが、オーバーロードを設定するときにこのエラーが発生します。オーバーロードされた '演算子++'は単項演算子または2項演算子でなければなりません(3つのパラメータを持ちます)
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
}
これらは私が得る2つのエラーです:
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.h'では、' fraction'という名前のクラスを宣言しますが、インクリメント演算子は 'Fraction'という名前のクラスを使用しています。 'fraction.h'では2つの演算子のメンバでないバージョンを宣言し、' Main.cpp'では 'Fraction'のメンバ関数である演算子を定義しています。演算子の内部クラスと外部クラスの定義については、[this](http://en.cppreference.com/w/cpp/language/operator_incdec)を参照してください。 – crayzeewulf