2017-05-06 3 views
0

ファーストをオーバーロードすることはできません私は取得していますエラーです:は、このすべての<<演算子

error: overloaded 'operator<<' must be a binary operator (has 3 parameters) std::ostream& operator<< (std::ostream& os, const Dcomplex& c);

と私は理由を理解していません。私はいくつかの他の質問を読んで、彼らはすべてconstを追加すると言ったが、私のために働いていない。

だからこれは私のヘッダファイルです:

#ifndef AUFGABE5_DCOMPLEX_H 
#define AUFGABE5_DCOMPLEX_H 

class Dcomplex { 
private: 
    double re, im; 

public: 
    Dcomplex(double r = 0, double i = 0); 
    Dcomplex(const Dcomplex& kopie); 
    ~Dcomplex(); 

    double abswert() const; 
    double winkel() const; 
    Dcomplex konjugiert() const; 
    Dcomplex kehrwert() const; 
    Dcomplex operator+(const Dcomplex& x)const; 
    Dcomplex operator-(); 
    Dcomplex operator*(const Dcomplex& x)const; 
    Dcomplex operator-(const Dcomplex& x)const; 
    Dcomplex operator/(const Dcomplex& x)const; 
    Dcomplex& operator++(); 
    Dcomplex& operator--(); 
    const Dcomplex operator++(int); 
    const Dcomplex operator--(int); 

    std::ostream& operator<< (std::ostream& os, const Dcomplex& c); 
    std::istream& operator>> (std::istream& is, const Dcomplex& c); 

    bool operator>(const Dcomplex &x)const; 

    void print(); 
}; 

#endif //AUFGABE5_DCOMPLEX_H 

私はそれが働いていない理由を任意のアイデアのために感謝しています。

編集:

std::istream& Dcomplex::operator>>(std::istream &is, const Dcomplex& c) { 

    double re,im; 

    std::cout << "Der Realteil betraegt?"; is >> re; 
    std::cout << "Der Imaginaerteil betraegt?"; is >> im; 

    Dcomplex(re,im); 

    return is; 
} 
+1

'オペレータ<<' 'とオペレータ>>'非メンバ関数でなければなりません。 – songyuanyao

答えて

0

あなたはクラス内で定期的にオペレータのオーバーライド機能を記述する場合、関数の最初のパラメータは常にクラス自体です。別のものを指定することはできません。 3つのパラメータを受け取る演算子はありません(?:を除くが、これを上書きすることはできません)。最初のパラメータをクラス自体ではなく書き込む場合は、フレンド関数を試すことができます。

class Dcomplex { 
    // some stuff 
    friend std::ostream& operator<<(std::ostream& os, const Dcomplex& c); 
    friend std::istream& operator>>(std::istream& is, Dcomplex& c); 
} 

std::ostream& operator>>(std::ostream& os, const Dcomplex& c){ 
    // Define the output function 
} 
std::istream& operator>>(std::istream& is, Dcomplex& c){ 
    // Define the input function 
} 
+0

ああ、私はそれを得て、それは動作します。しかし、私の教授は、私はそこに友人の機能を使う必要があると言ったことはありませんでしたが、それは動作し、非常に感謝します! –

0

オペレータの最初の引数は「この」であるので、あなたは二つの引数を宣言した場合、オペレータは、実際には3つ取得します - 「これを」、そしてあなたが宣言した二つの引数。あなたはfriendとしてそれを宣言することを意図しているかのように思える:

friend ostream& operator<<(ostream& os, const Dcomplex& c); 
+0

申し訳ありませんが.hのために働いてくれてありがとう、しかし今は私の.cppに同じエラーがありますが、私はそこで友人を使うことはできません。 .cppは私のメインポストにあります。 –

+0

@HenningWilmer 'friend'は、実装ではなく、定義に必要です。 – Mureinik

関連する問題