VSCode中向vector推入std::pair时出现‘expected expression’错误的修复
修复
vector<pair<int,int>> push_back时的"expected expression"错误 这个编译错误的核心原因是编译器未启用C++11或更高版本的标准。C11才引入了列表初始化({})语法,允许直接用{a,b}这种形式构造pair并传递给push_back;如果编译器默认使用C03标准,就无法识别这种语法,从而抛出"expected expression"错误。
以下是两种可行的修复方案:
方案1:启用C++11及以上编译标准
在VSCode中,修改编译任务的配置文件(.vscode/tasks.json),在编译参数里添加-std=c++11或更高版本(如-std=c++17)。示例配置片段:
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-std=c++17", // 添加该行启用C++17标准 "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], // 其余配置内容保持不变 } ] }
启用标准后,原代码中的edge.push_back({i, stoi(num)});就能正常编译运行。
方案2:显式构造pair对象(兼容旧标准)
如果不想修改编译标准,可以改用显式构造pair的方式,两种写法任选其一:
- 使用
make_pair函数:edge.push_back(make_pair(i, stoi(num))); - 直接用你定义的
ii别名构造:edge.push_back(ii(i, stoi(num))); // 因#define ii pair<int,int>,可直接用ii替代
修改后的完整代码示例(基于make_pair):
#include <iostream> #include <sstream> #include <vector> #define ii pair<int, int> using namespace std; // DSK -> DSC int n; vector <ii> edge; string s, num; int main() { cin >> n; cin.ignore(); for(int i = 1; i <= n; i++) { getline(cin, s); stringstream ss(s); while(ss >> num) if(i < stoi(num)) edge.push_back(make_pair(i, stoi(num))); } return 0; }
内容的提问来源于stack exchange,提问作者Mini Cake
相关产品推荐
相关产品推荐

