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

为何C++使用vector的push_back时出现重载函数参数列表不匹配错误

报错原因

你的std::vector<StudyModule*>存储的是指向非const的StudyModule指针,而addModules方法的入参module是const StudyModule&类型,对它取地址得到的是const StudyModule*类型,两种指针类型不匹配,因此push_back找不到符合参数列表的重载函数。

可行修复方案
  • 方案1:修改vector的存储类型,改为存储const指针
    如果业务逻辑中不需要通过vector里的指针修改StudyModule实例,直接修改成员变量定义即可:
    std::vector<const StudyModule*> modules;
    
  • 方案2:去除入参的const修饰
    如果确认后续需要修改vector中存储的StudyModule实例,调整addModules方法的入参定义:
    // 类内声明修改
    void addModules(StudyModule& module);
    // 类外实现对应修改
    void StudentData::addModules(StudyModule& module)
    {
        this->modules.push_back(&module);
    }
    
  • 方案3:存储对象而非指针(更推荐,可避免野指针问题)
    如果不需要多态特性,直接存储StudyModule实例更安全,不需要手动管理内存,也不会出现类型匹配问题:
    // 成员变量修改
    std::vector<StudyModule> modules;
    // addModules实现修改
    void StudentData::addModules(const StudyModule& module)
    {
        this->modules.push_back(module);
    }
    

注意:当前用指针存储的方式还存在生命周期风险,如果入参module是栈上临时对象,后续vector里存的指针会变成野指针,引发未定义行为,优先考虑方案3更安全。

内容的提问来源于stack exchange,提问作者Dinnea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:48:02