【发布时间】: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,其中os是std::ostream& os。我不认为它可以转换为指针。operator<<预计会返回对流的引用,因此您可以链接调用。如果你以某种方式在链中返回一个指针,你很可能会收到一个错误,即指针上的operator<<未定义。 -
你需要使用
*解引用运算符来获取unique_ptr存储的MyBook,std::cout << it->second;应该是std::cout << *it->second;。
标签: c++11 vector printing iterator operator-overloading