std :: map.insert "не удалось вывести аргумент шаблона для ..." - PullRequest
5 голосов
/ 30 января 2012

Я пытаюсь ознакомиться с библиотекой STL, но у меня возникают проблемы с пониманием моей ошибки компиляции. Я искал другие вопросы, используя строку ошибки компилятора "не удалось вывести аргумент шаблона для ...", но ни один из ответов не представляется применимым или уместным.

Ошибка 4 ошибка C2784: 'bool std :: operator <(const std :: unique_ptr <_Ty, _Dx> &, const std :: unique_ptr <_Ty2, _Dx2> &)': не удалось вывести аргумент шаблона для 'const std :: unique_ptr <_Ty, _Dx> & 'from' const std :: string 'c: \ программные файлы (x86) \ microsoft visual studio 10.0 \ vc \ include \ xfunctional 125

Я пишу простой интерпретатор для вычисления производных / интегралов по одной переменной. Я хочу карту для сопоставления ввода пользователя с кодом внутреннего контроля. Ключ является триггерной (или другой) функцией, а int является управляющим кодом. Я использую отдельный файл заголовка для определения функций, но для этого примера я просто использую целочисленные литералы. Я использую Visual Studio:

#include <cstdio>
#include <map>
using namespace std;
int main(int argc, char** argv) {
    map< string, int > functions;
    functions.insert( pair<string, int>("sin", 1) );

    return 0;
}

EDIT:

после попытки ответа Сержа (который работал):

functions.insert(std::make_pair(std::string("sin"), 1));

Я понял ошибку и попробовал это:

pair<string, int> temp = pair<string,int>("cos",2);
functions.insert(temp);

хотя это, вероятно, неоптимально, это иллюстрирует проблему не построения парного объекта перед вставкой в ​​карту.

Ответы [ 2 ]

8 голосов
/ 30 января 2012

Убедитесь, что у вас есть строка заголовок включен.

#include <map>
#include <utility>
#include <string>

...

std::map<std::string, int> functions;
functions.insert(std::make_pair(std::string("sin"), 1));
3 голосов
/ 30 января 2012
  1. Вы не включили <string>
  2. char** argv[] должно быть const char* argv[]
...