I have a class called "Map" and I'm trying to save some of its objects in std :: map Card.hpp:
class Card { public: enum ValueType { NOVALUE, ACE }; enum FaceType { NOFACE, CLUBS }; Card(const ValueType & _value, const FaceType & _face); Card(const Card & _card); private: ValueType m_value; FaceType m_face; };
This is how I store and access it: Deck.hpp:
#include <map> class Card; class Deck { public: Deck(); std::size_t length() const; Card get_card(const int & _num); private: std::map<int, Card> m_deck; };
Deck.cpp:
#include "Card.hpp" Deck::Deck() { m_deck.insert(std::pair<int, Card>(0, Card(Card::NOVALUE, Card::NOFACE))); m_deck.insert(std::pair<int, Card>(1, Card(Card::ACE, Card::CLUBS))); } std::size_t Deck::length() const { return m_deck.size(); } Card Deck::get_card(const int & _num) { return m_deck[_num]; }
Now when I compile it, I get the following error:
/usr/include/c++/4.6/bits/stl_map.h:453:45: error: no matching constructor for initialization of 'mapped_type' (aka 'Card') __i = insert(__i, value_type(__k, mapped_type())); ^ Deck.cpp:69:18: note: in instantiation of member function 'std::map<int, Card, std::less<int>, std::allocator<std::pair<const int, Card> > >::operator[]' requested here return m_deck[_num]; ^ ./Card.hpp:30:2: note: candidate constructor not viable: requires 2 arguments, but 0 were provided Card(const ValueType & _value, const FaceType & _face); ^ ./Card.hpp:32:2: note: candidate constructor not viable: requires 1 argument, but 0 were provided Card(const Card & _card); ^ 1 error generated.
Why am I getting this error? I use the Card only as a value!