Оператор C ++ << Перегрузка для печати значений переменных членов - PullRequest
0 голосов
/ 28 января 2019

Все - я проверил существующие темы для обсуждения и / или вопросы по этому вопросу, и, похоже, никто не решает эту проблему.Отсюда и постить этот вопрос.Рад, что вас сослали на существующую ссылку, которая, возможно, уже решала эту проблему, если бы я ее упустил.

Ниже приведен мой фрагмент кода:

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: not match for 'operator <<" ".</p>

Возможно, это не могло быть из-за различий в типах данных между размерами и ценами, и даже если это так, я не понимаю, как я могу использовать шаблон для этого, когда я передаю объект(mbk) в противоположность вектору (вектор int против двойного вектора) в качестве аргумента оператора << перегружающей функции. </p>

Спасибо за любые идеи.Рад быть распятым, хотя я все еще новичок.

С наилучшими пожеланиями.

1 Ответ

0 голосов
/ 28 января 2019

разобрался.Ошибка школьника.Значение было указателем на объект, следовательно, должно быть.Это прекрасно компилируется.

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