2013-02-27 55 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