You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:30:41