Das ist, weil std::make_pair
nimmt Bezug als Parameter weitergeleitet wird. Sie sollten std::make_pair
mit einem deduzierenden Kontext und dem Konstruktor std::pair
verwenden, wenn Sie den Vorlagenparameter explizit angeben möchten.
Hier sind Ihre Möglichkeiten:
make_pair:
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.insert(std::make_pair(str1, value));
}
}
Paar Konstruktor
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.insert(std::pair<std::string, int>(str1, value));
}
}
Noch besser, emplace
:
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.emplace(str1, value);
}
}
Wenn Sie wirklich std::make_pair
mit expliziter Parameter verwenden möchten, können Sie den Wert der Kategorie in der Template-Parameter angeben können, aber ich rate Ihnen diese nicht zu tun, besiegt es irgendwie die ganze Zweck der std::make_pair
:
void insertIf(std::string str1, int value, std::map<std::string,int>& myMap) {
if(value == 1 {
myMap.insert(std::make_pair<std::string&, int&>(str1, value));
}
}
Edit: es unter Windows funktioniert, weil Sie eine veraltete Version von VS verwenden müssen, die Weiterleitung Referenz noch nicht unterstützen.
Können wir eine [mcve] haben? – user4581301
Tippfehler? 'arg1.insert (std :: make_pair (str1, int1));' <- '))' –
Unimportant