我试图创建一个unordered_map,其中有一个整数作为键,一个Transition对象作为值....这就是我所拥有的:
实例化
unordered_map<int, Transition> transitions;
过渡阶层声明:
class Transition{
public:
Transition(int n, char r, char m);
~Transition();
int getNextState();
char getReplacement();
char getMovement();
private:
int nextState;
char replacement;
char movement;
};
向地图添加转场
// Create transition object
Transition t(r,b,x);
transitions[keyForMap] = t;
我收到此错误:
/usr/include/c++/4.7/bits/hashtable_policy.h:445:24: error: no matching function for call to ‘Transition::Transition()’
/usr/include/c++/4.7/bits/hashtable_policy.h:445:24: note: candidates are:
In file included from ball_p1.cpp:6:0:
Transition.h:4:3: note: Transition::Transition(int, char, char)
Transition.h:4:3: note: candidate expects 3 arguments, 0 provided
Transition.h:1:7: note: constexpr Transition::Transition(const Transition&)
Transition.h:1:7: note: candidate expects 1 argument, 0 provided
我是否需要以某种方式指定构造函数在实例化中占用的参数?我究竟做错了什么?谢谢你提前帮忙。
答案 0 :(得分:2)
我总是使用map.insert(std::make_pair(keyForMap, transition));
。
答案 1 :(得分:0)
std::map::operator[]
的工作方式如下:
-如果指定的键已经存在,则返回对相应值的引用。
-如果指定的键不存在,则将其插入,为其分配默认值,并返回对该最近创建的默认值实例的引用。
例如,
map<string, int> m;
std::cout << m["new_key"]; // This prints the default value for type int, namely '0'.
如果您的值类型不支持默认值(例如,如果它是不具有默认构造函数的自定义类),则您不能使用std::map::operator[]
。
但是,您可以使用std::map::insert
来执行相同的功能。后者将直接在您的地图中插入一对,而无需经过创建默认值的中间步骤。
答案 2 :(得分:0)
您的构造函数摆脱了默认构造函数(这是必需的)。