Что здесь происходит?
Я пытаюсь создать пару int
и string
, и я могу создать пару, если я использую «магические значения», но не могу передать переменные.Weird ошибка компилятора: невозможно преобразовать параметр из 'int' в 'int &&'
std::vector<std::pair<int, std::string> > num_text;
std::string text = "Smeg";
int num = 42;
// Works fine
num_text.push_back(std::make_pair<int, std::string>(42, std::string("Smeg")));
// Cannot convert parameter 2 from 'std::string' to 'std::string &&'
num_text.push_back(std::make_pair<int, std::string>(42, text));
// Cannot convert parameter 1 from 'int' to 'int &&'
num_text.push_back(std::make_pair<int, std::string>(num, std::string("Smeg")));
// Cannot convert parameter 1 from 'int' to 'int &&'
num_text.push_back(std::make_pair<int, std::string>(num, text));
// Works fine again
num_text.push_back(std::make_pair<int, std::string>(42, std::string("Smeg")));
Я использую VS 2012 и вставил в код, который был написан в VS 2008. Не могу себе представить, что бы иметь ничего общего с ним, но не было никаких проблем в первоначальном (2008) код.
Я чувствую себя немного глупым, потому что не могу тренироваться, что здесь происходит, но что я могу сказать, я просто не понимаю.
Или передать копию построенных времен. Например, 'num_text.push_back (std :: make_pair (42, std :: string (text))) Или опустить параметры шаблона. –
@NikosC., Опустите параметры, конечно, но ваше первое решение не будет. Я бы не отправил '42' вместо' num'! – Shahbaz
Как я уже говорил, копия построена временными. Для передачи 'num' вы можете использовать' num_text.push_back (std :: make_pair (int (num), std :: string (text))). –