C++程序运行报错:expected primary-expression before ‘{’ token 求助
解决C++程序中的"error: expected primary-expression before ‘{’ token"报错
报错原因分析
你的代码存在三个关键问题导致编译错误:
- 参数传递错误:
temp.push_back(nums[i])的返回值是void,但howSum的第三个参数需要vector<int>类型,不能直接将该表达式作为参数传递。 - vector比较语法错误:
if (dp[target]!={})属于非法语法,C++中不能直接用空初始化列表和vector做比较,需用empty()方法判断容器是否为空。 - 引用参数不匹配:
howSum的第一个参数是int&(非const引用),但target-nums[i]是临时值,临时值无法绑定到非const引用,需修改参数类型。
修正后的代码
#include<iostream> #include<map> #include<vector> using namespace std; map<int, vector<int>> dp; // 将target参数改为int,避免临时值绑定引用的问题 vector<int> howSum(int target, vector<int>& nums, vector<int> temp){ if (target == 0) return temp; if (target < 0) return {}; if (dp.find(target) != dp.end()) return dp[target]; for (int i=0;i<nums.size();i++){ // 先复制temp,添加元素后再传递给递归函数 vector<int> new_temp = temp; new_temp.push_back(nums[i]); dp[target] = howSum(target - nums[i], nums, new_temp); // 用empty()判断vector是否为空 if (!dp[target].empty()) { return dp[target]; } } return {}; } int main(){ int n,target; cin>>n>>target; vector<int> nums(n); for (int i=0;i<n;i++) cin>>nums[i]; vector<int> ans = howSum(target, nums, {}); if (ans.size()>0){ for(auto i:ans) cout<<i<<" "; } }
额外说明
修正后的代码解决了编译错误,同时保留了原递归+记忆化的howSum逻辑。递归时通过复制临时vector并添加当前元素,保证每一层递归的路径独立,避免了原代码中直接修改同一个vector导致的逻辑错误。
内容的提问来源于stack exchange,提问作者Ann___12345
相关产品推荐
相关产品推荐

