C ++运算符<<重载以打印成员变量值

时间:2019-01-28 15:58:41

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

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

以下是我的代码段:

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;
}

在编译时,我看到“错误:'operator <<'不匹配”错误。

可能不是因为大小和价格之间的数据类型不同,即使这样,我也看不到如何在传递对象(mbk)时使用模板与作为运算符<<重载函数的参数的向量(int向量vs. double向量)相反。

感谢您的见解。很高兴被钉在十字架上,尽管我还是个新手。

最良好的祝愿。

1 个答案:

答案 0 :(得分:0)

想通了。小学生错误。该值是指向对象的指针,因此应该是。这样编译就可以了。

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