2013-02-27 306 views
0

只是想知道是否有人可以指向正確的方向。我有一個朋友提取操作符,如果我包含命名空間標準;但如果我不這樣做會失敗。任何人都可以給我一個提示嗎?沒有命名空間的朋友重載操作符std

ostream& operator << (ostream &out, coins &value) 

這也是一個朋友的功能,所以我有這個在我的class.h文件(如朋友)在我functions.h文件 (爲原型),並在我的functions.cpp文件(邏輯)。

香港專業教育學院試圖使它

的std :: ostream的&運營商.... 的std :: ostream的&運營商的std :: < <(ETC)

,但我只是不能看到我去錯了。我的編譯器不斷告訴我「的ostream沒有指定類型」

謝謝

+1

你有沒有包括''? – jrok 2013-02-27 18:13:55

+1

這不是一個提取操作符:這是一個*插入*操作符。 – 2013-02-27 18:14:56

回答

1

這是ostream存在於std命名空間,不要做std::<<(這還不意義!)。儘量少採用霰彈槍編程方法;也就是說,不要只嘗試隨機的東西,直到它工作。錯誤告訴你ostream(不合格)是問題所在,所以你必須先解決這個問題。

#include <iostream> 

struct coins 
{ 
    friend std::ostream& operator<<(std::ostream& sink, const coins& value); 
}; 

std::ostream& operator<<(std::ostream& sink, const coins& value) 
{ 
    sink << "doing coins output"; 
    return sink; 
} 

int main() 
{ 
    coins c; 
    std::cout << c << std::endl; 
} 

順便說一句,這是插入操作符,因爲您將數據插入流中。提取將是>>

+0

謝謝,我對此有點新... – Zane 2013-02-28 03:07:22

+0

這是一個有趣的問題。根據這裏(http://www.cplusplus.com/reference/ostream/ostream/operator-free/),非ostream成員重載在命名空間std中定義;沒有使用namespace std,編譯器是如何知道的,你的意思是std :: operator <<(std :: ostream&,const whatever_type_reference)? – h9uest 2015-03-27 21:10:21

+0

@ h9uest:依賴於參數的查找。 – GManNickG 2015-03-27 22:28:01