这到底是怎么了?
我试图创建一个 int
和一个 string
的对,如果我使用 "魔法值" 就可以创建对,但好像无法传入变量。
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<int, std::string>(42, std::string(text)))
或者省略模板参数。 - Nikos C.42
而不是num
! - Shahbaznum
,你可以使用num_text.push_back(std::make_pair<int, std::string>(int(num), std::string(text)))
。 - Nikos C.std::pair
。但你是对的。我会澄清这两者之间的区别。 - Shahbaz