【问题标题】:C++ Operator<< Overloading to Print Member Variable ValuesC++ 运算符<< 重载以打印成员变量值
【发布时间】:2019-01-28 15:58:41
【问题描述】:

所有——我已经检查了现有的讨论主题和/或问题,但似乎没有一个解决这个问题。因此发布这个问题。如果我忽略了它,很高兴被提及可能已经解决这个确切问题的现有链接。

下面是我的sn-p代码:

class MyBook{
  public:
    MyBook(): bidPrices(10, 0.0),
              askPrices(10, 0.0),
              bidSizes(10, 0),
              askSizes(10, 0) {}
    std::vector<double> bidPrices;
    std::vector<double> askPrices;
    std::vector<int> bidSizes;
    std::vector<int> askSizes;
};

// Forward declaration
std::unordered_map<std::string, std::unique_ptr<MyBook>> myBookMap;

// Overload << to print.

std::ostream&* operator<<(std::ostream& os, MyBook& mbk)
{
  os << "bid price: " << mbk.bidPrices[0] <<  " "
     << "bid size: " << mbk.bidSizes[0] <<  " "
     << "ask price: " << mbk.askPrices[0] <<  " "
     << "ask size: " << mbk.askSizes[0] << endl;
  return os;
}

稍后在 main() 中:

std::unordered_map<std::string, std::unique_ptr<MyBook>>::iterator it = myBookMap.begin();
while (it != myBookMap.end())
{
  std::cout << it->first;
  std::cout << it->second;
}

在编译时,我看到“error: no match for 'operator

这可能不是因为尺寸和价格之间的数据类型不同,即使是这样,当我传入对象 (mbk) 时,我也看不出如何使用模板而不是作为运算符

感谢您的任何见解。很高兴被钉十字架,虽然我还是个新手。

最好的祝愿。

【问题讨论】:

  • 它甚至可以编译吗?因为您说您正在返回对指针的引用,但是您使用return os,其中osstd::ostream&amp; os。我不认为它可以转换为指针。 operator&lt;&lt; 预计会返回对流的引用,因此您可以链接调用。如果你以某种方式在链中返回一个指针,你很可能会收到一个错误,即指针上的operator&lt;&lt; 未定义。
  • 你需要使用*解引用运算符来获取unique_ptr存储的MyBookstd::cout &lt;&lt; it-&gt;second;应该是std::cout &lt;&lt; *it-&gt;second;

标签: c++11 vector printing iterator operator-overloading


【解决方案1】:

想通了。小学生错误。该值是指向对象的指针,因此应该是。这编译得很好。

std::cout << *it->second;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    相关资源
    最近更新 更多