class Person
{
public:
Person(string name,int age)
{
m_name = name;
m_age = age;
}
string m_name;
int m_age;
};
int main()
{
Person p1("a",15);
Person p2("b",20);
Person p3("c",25);
Person p4("d",30);
map<int,Person>mp;
mp.insert(make_pair(1,p1));
mp.insert(make_pair(4,p4));
mp.insert(make_pair(3,p3));
mp.insert(make_pair(2,p2));
cout << mp[3].m_age << endl;
return 0;
}
你这个代码不是执行报错,而是编译就报错:
首先你要明白,make_pair 并不是把 p1 本身放到 map 里面,而是会创建一个新的 copy 放到 map 里面,那么问题就来了,Person 只有一个带参数构造的版本,所以程序不知道没有参数的时候如何去创建一个新的 Person 出来,就会报这个错误,修改起来也很简单,加一个不带参数的默认构造就可以了。