2017-04-18 6 views
0

私はこれでほとんど終わりました。オーバーロードされた出力演算子で何を返す必要があるのか​​理解できません。もともと、それは戻り値以下でしたが、私はエラーを受け取り続けます(タイプ "stool :: ostream &"(const修飾されていない)の型は "bool"型の値で初期化できません)。私の帰りの声明の中で?戻ってくるものを決める - ブール値

class Student 
{ 
private: 
    int stuID; 
    int year; 
    double gpa; 
public: 
    Student(const int, const int, const double); 
    void showYear(); 
    bool operator<(const Student); 
friend ostream& operator<<(ostream&, const Student&); 
}; 
Student::Student(const int i, int y, const double g) 
{ 
    stuID = i; 
    year = y; 
    gpa = g; 
} 
void Student::showYear() 
{ 
    cout << year; 
} 
ostream& operator<<(ostream&, const Student& otherStu) 
{ 
    bool less = false; 
    if (otherStu.year < otherStu.year) 
    less = true; 
    return ; 
} 
int main() 
{ 
    Student a(111, 2, 3.50), b(222, 1, 3.00); 
    if(a < b) 
    { 
     a.showYear(); 
     cout << " is less than "; 
     b.showYear(); 
    } 
    else 
    { 
    a.showYear(); 
    cout << " is not less than "; 
    b.showYear(); 
    } 
    cout << endl; 
    _getch() 
    return 0; 
} 
+1

、 '演算子<<'べき最初のパラメータを直接返します。 –

+0

実際に返ってきたことだから、返すようにしましょう。 – pm100

+2

'operator <<'と 'operator <'を混同しているようです。 –

答えて

5

あなたがoperator<operator<<の間で混乱しているように聞こえます。

// operator< function to compare two objects. 
// Make it a const member function 
bool Student::operator<(const Student& other) const 
{ 
    return (this->year < other.year); 
} 

// operator<< function to output data of one object to a stream. 
// Output the data of a Student 
std::ostream& operator<<(std::ostream& out, const Student& stu) 
{ 
    return (out << stu.stuID << " " << stu.year << " " << stu.gpa); 
} 
0

ここでドキュメントによると:規約により

http://en.cppreference.com/w/cpp/language/operatorsあなたはパラメータを持っているのostreamを返す必要が

..

std::ostream& operator<<(std::ostream& os, const Student& obj) 
{ 

    return os << obj.stuID << ", " << obj.year << ", " << obj.gpa; 
} 
関連する問題