如何为构造函数中的struct设置预设参数?构造函数缺第8参数报错
问题解决:构造函数缺少第8个参数及struct参数默认值设置
错误原因
你的Libro构造函数第8个参数是maximos&(非const左值引用),这类引用无法绑定临时对象,且你未给它设置默认参数,因此编译器要求必须显式传入该参数,否则会触发“缺少第8个参数”的错误。你之前给参数添加名字obj只是补全语法,并未解决默认值的核心问题。
解决方案
根据你是否需要在构造函数中修改maximos对象,分两种情况处理:
情况1:构造函数不需要修改maximos对象
将参数改为const maximos&,这样即可绑定临时对象,同时设置默认值:
- 确保
maximos有可用的默认构造(用于生成临时对象):struct maximos { size_t lengthTitulo = 0; size_t lengthAutor = 0; size_t lengthIdioma = 0; size_t lengthGenero = 0; void CreacionVariables(); // 若需要在构造时调用初始化函数,可手动编写默认构造 maximos() { CreacionVariables(); } }; - 修改构造函数声明,添加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
相关产品推荐
相关产品推荐

