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

如何为构造函数中的struct设置预设参数?构造函数缺第8参数报错

问题解决:构造函数缺少第8个参数及struct参数默认值设置

错误原因

你的Libro构造函数第8个参数是maximos&(非const左值引用),这类引用无法绑定临时对象,且你未给它设置默认参数,因此编译器要求必须显式传入该参数,否则会触发“缺少第8个参数”的错误。你之前给参数添加名字obj只是补全语法,并未解决默认值的核心问题。

解决方案

根据你是否需要在构造函数中修改maximos对象,分两种情况处理:

情况1:构造函数不需要修改maximos对象

将参数改为const maximos&,这样即可绑定临时对象,同时设置默认值:

  1. 确保maximos有可用的默认构造(用于生成临时对象):
    struct maximos {
        size_t lengthTitulo = 0;
        size_t lengthAutor = 0;
        size_t lengthIdioma = 0;
        size_t lengthGenero = 0;
        void CreacionVariables();
        
        // 若需要在构造时调用初始化函数,可手动编写默认构造
        maximos() {
            CreacionVariables();
        }
    };
    
  2. 修改构造函数声明,添加const修饰和默认值:
    Libro(const std::string = "", const std::string = "", const std::string = "", int = 0, int = 0, const std::string = "", int = 0, const maximos& = maximos{});
    

此时你可以省略第8个参数,编译器会自动用默认的临时maximos对象填充。

情况2:构造函数需要修改maximos对象

非const左值引用无法绑定临时对象,因此无法给该参数设置默认值,必须显式传入一个已定义的maximos左值变量:

// 先定义并初始化maximos对象
maximos myMax;
myMax.CreacionVariables();
// 创建Libro对象时传入该变量
Libro miLibro("", "", "", 0, 0, "", 0, myMax);

内容的提问来源于stack exchange,提问作者Franco Zavala Morgan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:16:02