在此代码中,我尝试使用pair(int,pair(string,string)) 的initializer_list 初始化类对象,但是在初始化map(int,pair(string,string)) 类型的类成员map2 时出现错误。

这是我的代码

#include <iostream>
#include <string>
#include <initializer_list>
#include <map>
using namespace std;

class contact{
private:

        map <int,pair<string,string>> map2;

public:

    contact(initializer_list<pair<int,pair<string,string>>> m):map2(m){}
    void display(){
        for (const auto& it:map2){
            cout<<it.first;
        }
    }
};

int main() {
    contact obj{
        make_pair(4,make_pair("parul","agrawal")),
        make_pair(5,make_pair("keshav","agrawal")),
    };

    obj.display();
    return 0;
}

最佳答案

map 元素有 const 键。

改变

contact(initializer_list<pair<int, pair<string, string>>> m) : map2(m) {}


contact(initializer_list<pair<const int, pair<string, string>>> m) : map2(m) {}

附带说明一下,您也可以放弃 make_pair():
contact obj
{
    {4, {"parul", "agrawal"}},
    {5, {"keshav", "agrawal"}},
};

关于c++ - 如何从初始化器列表对构造对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55555084/

10-16 07:29