2013-11-23 52 views
1

我有一个指针向量,我试图重载ostream操作符以使打印更容易。但是,我似乎无法获得被调用的函数。这里是我的代码:C++重载操作符<<要使用指针向量

std::vector<Set*> sets; 

for (int i = 0; i < sets.size(); i++) { 
    std::cout << sets[i] << std::endl; 
} 

std::ostream& operator<<(std::ostream& out, const Set* s) { 
    //Print set code 
} 

我遍历所有的集合,并通过把套[I]在ostream的,但功能不叫调用打印的具体设置。它只是打印集[i]的地址。当我有一个Set的向量时,我做了这个工作,但是当我试图将它更改为Set *的向量时,我无法使它工作。我哪里错了?

+0

什么是'Set'?它是如何声明的?在显示的代码中'set'是'Set *'的向量,所以从'set'打印第i个元素显然会打印一个地址。可能你需要一个来自数据结构/容器'Set'的元素,使用' - >'来表示。 – P0W

+0

集是Set指针的向量。它包含**指针**。指针是地址。当你std :: cout他们,这在逻辑上打印地址。这就是你的代码所要求的,这是你逻辑上得到的。你还想要它做什么? –

+0

我的意图是让set [i]通过重载的operator <<函数打印出来。 Set基本上是一个链表数据结构。我正在遍历它并在重载的操作符中打印元素。我试着用(* sets [i])解引用集合,但那给了我一个链接错误。如果我编写自己的函数,我可以访问这些元素并使用sets [i] - > data打印它们,但是如果我将该代码放入重载的<<运算符中,则无法使其工作,因为该函数从未被调用过。 – Lucas

回答

1

重载解析是使用编译器在调用点可见的声明完成的。你需要将你的operator<<重载,或者至少声明它,超过使用它的代码。

看来,它的工作原理:http://ideone.com/1BeACP

+0

这工作。我在上面所有的代码中都有一个函数存根,但是由于某种原因它没有工作。当我将实际功能移到代码工作的上面时。然后,当我将功能移回并替换功能存根时,它仍然有效。不知道我哪里错了,但感谢您的帮助。 – Lucas