2012-11-21 43 views
0

我想有一個非類成員重載的put運算符,它使用引用參數輸出汽車對象的信息。插入運算符的非成員函數形式

這裏是我的代碼:

ostream& operator<<(ostream& os, Car& p) 
{ 
     os << "For a car make " << p.get_make() << ", " << p.get_year()<< ", the price is $" << p.get_price() << endl; 
     return os; 
} 

我得到一個錯誤std::ostream& Car::operator<<(std::ostream&, Car&)' must take exactly one argument

不允許我有車作爲參數?

謝謝。

+0

只是聲明函數是類的朋友(即Car類) – rajesh6115

回答

2

你說你想定義一個非會員運營商。但是,您將運算符定義放在類定義中,這使得編譯器將其視爲成員(此運算符的成員實現必須只有一個參數,因此爲錯誤消息)。如果你想定義一個非成員操作符,或者將它移動到類定義之外或者聲明它爲friend(或者兩者都有)

+0

什麼是關係在ostream成員插入操作符和它的非成員超載之間?當我寫「std :: cout << car」時,哪一個被調用? – h9uest

+0

@ h9uest:你在說什麼? 'ostream'沒有'Car'類型的成員操作符。 'ostream'是一個標準的庫類。它對用戶定義的Car類型一無所知,並且不可能有任何超載。 – AnT

+0

嗨AnT,我在這裏提出更好的問題:http://stackoverflow.com/questions/29306185/relation-between-ostream-insertion-operator-and-its-non-member-overload – h9uest