全部-我已经检查了现有的讨论主题和/或问题,似乎没有一个可以解决。因此发布这个问题。很高兴被提及到一个现有的链接,如果我忽略了它,它可能已经解决了这个确切的问题。
以下是我的代码段:
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向量)相反。
感谢您的见解。很高兴被钉在十字架上,尽管我还是个新手。
最良好的祝愿。
答案 0 :(得分:0)
想通了。小学生错误。该值是指向对象的指针,因此应该是。这样编译就可以了。
std::cout << *it->second;