0

ちなみに、arch linux で eclipse と g++ を使用しています (1 週間も前に pacman -Syu を実行したので、すべて最新の状態です)。

これをコンパイルしようとするたびに、Eclipse はエラーを生成します。

#ifndef DATE_HPP_
#define DATE_HPP_

using namespace std;

class Date {
public:
    int Year;
    char Month;
    char Day;
    char HH;
    char MM;
    char ss;
    Date();

    /*
     * Overloaded Operator Functions
     */
    //Assignments
    Date operator=(Date input);
    //Comparisons
    bool operator==(Date& rhs);
    bool operator!=(Date& rhs);
    bool operator<(Date& rhs);
    bool operator>(Date& rhs);
    bool operator<=(Date& rhs);
    bool operator>=(Date& rhs);
    //Conversion
    operator char*();
    operator std::string();
    ostream& operator<<(ostream& os, const Date& date); //TROUBLE LINE
};

#endif /* DATE_HPP_ */

Eclipse は、operator<< 宣言に、引数を 1 つだけ持つ必要があるというメッセージを表示します。それでも、次のように宣言すると:

ostream& operator<<(const Date& date);

2つある必要があると不平を言います。私は何を間違っていますか?

4

2 に答える 2

4

演算子の 2 つの引数のオーバーロードは、非メンバー関数でなければなりません。クラス定義から移動するか、追加friendして非メンバーのフレンド関数にするか、どちらか適切な方を選択してください。

引数が 1 つのオーバーロードは、オブジェクト インスタンスが左側のオペランドである場合に使用されるため、役に立ちません。

于 2013-10-08T23:44:45.880 に答える
0

friend ostream& operator<<(ostream& os, const Date& date);

また、コードに const を追加することもできます。例えば..

bool operator==(const Date& rhs) const;

また、技術的な理由で char にする必要がない限り、小さな値 (月など) しかとらない場合でも、すべての整数を int にすることをお勧めします。

于 2013-10-08T23:48:01.263 に答える