C++向vector push_back pair时报“(前缺少模板参数”错误如何解决?
问题原因
该报错是由于C++17之前的标准不支持std::pair的类模板实参推导,你直接写pair(a, b)时,编译器无法自动推导出你要构造的pair实例的模板参数类型,因此提示缺少模板参数。
修复方案
有三种常用的修复方式:
- 显式指定pair的模板参数:将两处
pair(a, b)、pair(c, d)分别修改为pair<int, int>(a, b)、pair<int, int>(c, d)即可。 - 使用
std::make_pair工具函数:它会自动根据传入参数的类型推导pair的模板参数,兼容所有C++标准版本,只需要将两处代码修改为make_pair(a, b)、make_pair(c, d)即可。 - 开启C17及更高版本的编译支持:如果你的编译器支持C17,可以在编译时添加对应编译参数(GCC/Clang添加
-std=c++17,MSVC添加/std:c++17),原有代码不需要修改即可正常编译。
修复后完整代码示例
#include <iostream> #include <vector> #include <utility> using namespace std; int main() { int x, y, a, b, c, d, j, m, v; vector<pair<int, int> > ladder; cin >> x >> y; for (int i = 0; i < x; i++) { cin >> a >> b; ladder.push_back(make_pair(a, b)); } vector<pair<int, int> > snake; for (int i = 0; i < y; i++) { cin >> c >> d; snake.push_back(make_pair(c, d)); } vector<int> moves; cin >> v; while (v != 0) { moves.push_back(v); v = 0; cin >> v; } return 0; }
内容的提问来源于stack exchange,提问作者user13869329
相关产品推荐
相关产品推荐

