c++ map 使用index 来取自定义value,报错

新手上路,请多包涵

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;

}

阅读 2.4k
1 个回答

你这个代码不是执行报错,而是编译就报错:

error C2512: “Person::Person”: 没有合适的默认构造函数可用

首先你要明白,make_pair 并不是把 p1 本身放到 map 里面,而是会创建一个新的 copy 放到 map 里面,那么问题就来了,Person 只有一个带参数构造的版本,所以程序不知道没有参数的时候如何去创建一个新的 Person 出来,就会报这个错误,修改起来也很简单,加一个不带参数的默认构造就可以了。

class Person
{
public:
    Person() {}
    Person(string name, int age)
    {
        m_name = name;
        m_age = age;
    }
    string m_name;
    int m_age;
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题