【问题标题】:C++ Overload operator << to work with vector of pointersC++ 重载运算符 << 使用指针向量
【发布时间】:2013-11-23 16:52:09
【问题描述】:

我有一个指针向量,我正在尝试重载 ostream 运算符以使打印更容易。但是,我似乎无法调用该函数。这是我的代码:

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
}

我遍历所有集合并通过将 sets[i] 放入 ostream 来调用特定集合进行打印,但未调用该函数。它只是打印集合[i] 的地址。当我有一个 Set 向量时,我有这个工作,但是当我试图将它更改为 Set* 向量时,我无法让它工作。我哪里错了?

【问题讨论】:

  • Set 是什么?它是如何声明的?在显示的代码中setSet* 的向量,因此从set 打印第i 个元素显然会打印一个地址。可能您需要来自数据结构/容器Set 的元素,请使用-&gt;
  • sets 是 Set 指针的向量。它包含指针。指针是地址。当您 std::cout 它们时,逻辑上会打印地址。这就是您的代码所要求的,这就是您从逻辑上得到的。你还想让它做什么?
  • 我的意图是通过重载的 operatordata 访问元素并打印它们,但是如果我将该代码放在重载的

标签: c++ pointers operator-overloading


【解决方案1】:

使用编译器在调用点可见的声明来完成重载解析。您需要将您的 operator&lt;&lt; 重载,或者至少是它的声明,移到使用它的代码之上。

瞧,它起作用了:http://ideone.com/1BeACP

【讨论】:

  • 这行得通。我在所有代码中都有一个函数存根,但由于某种原因它不起作用。当我将实际功能移到代码上方时,它起作用了。然后,当我将函数移回并替换函数存根时,它仍然有效。不知道我哪里出错了,但感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 2014-12-24
相关资源
最近更新 更多