Я знаю, что проблема в p.first
?потому что std::cout
не знает, как напечатать object
, поэтому я попытался перегрузить << operator
, но я не уверен, как это сделать.
Основы оператораПерегрузка может быть найдена в этом посте: Каковы основные правила и идиомы для перегрузки операторов? Я настоятельно рекомендую прочитать это, прежде чем идти дальше
В вашем случае я обнаружил две основные проблемы:
- Вы не упомянули свой класс
Key
.В частности, как бы вы вставили элемент в std::map
(член класса Inventory
), если вы не предоставите operator<
?Так как класс Key
определяется пользователем, вам нужно указать его.Вы можете прочитать больше об этом в этом посте SO: std :: maps с пользовательскими типами в качестве ключа - Второй и основной проблемой вашего кода является отсутствие
operator<<
для вашего Key
типа.Это можно сделать следующим образом:
Например, скажем, class Key
class Key
{
int member;
public:
Key(const int a): member(a){}
// provide operator< for your Key type
bool operator<(const Key& other)const { return this->member < other.member; }
// provide operator<< for Key class like follows
friend std::ostream& operator<<(std::ostream& out, const Key& key);
};
// implement outside the class
std::ostream& operator<<(std::ostream& out, const Key& key)
{
// simply for this case
return out << key.member;
}
, и теперь вы можете предоставить operator<<
для Inventory
класса аналогичным образом..
СМ. ПРИМ. ЖИЗНИ
// now in Inventory class
class Inventory
{
std::map<Key, int> inventory;
public:
Inventory(const std::map<Key, int>& m): inventory(std::move(m)) {}
// declared as friend, so that you can access the private member(map)
friend std::ostream& operator<<(std::ostream& out, const Inventory& inv);
};
// implement outside the class
std::ostream& operator<<(std::ostream& out, const Inventory& inv)
{
for(const auto& entry: inv.inventory )
out << entry.first << " Number of parts: " << entry.second << std::endl;
return out;
}
// in the main
int main()
{
Key key1{1};
Key key2{2};
std::map<Key, int> tempInvObj{{key1, 11}, {key2, 12}};
Inventory obj{tempInvObj};
std::cout << obj;
return 0;
}
Выход:
1 Number of parts: 11
2 Number of parts: 12