g++编译报错:DollarAmount类无匹配花括号初始化列表构造函数
错误原因
你定义的DollarAmount类仅公开了一个需要传入两个int64_t参数(分别对应美元数、美分数)的构造函数,但在类内部的addInterest成员函数中,实例化interest对象时仅传入了1个计算得到的总便士数值,参数数量与构造函数要求不匹配,因此触发编译报错。
修复方案(二选一即可)
方案1:新增单参数构造函数(改动最小)
在DollarAmount类的public权限块中,新增一个直接接收总便士数的构造函数即可:
class DollarAmount { public: // 原有双参数构造函数保留 explicit DollarAmount(int64_t dollars, int64_t cents) : amount{dollars * 100 + cents} { } // 新增单参数构造函数,直接传入总便士数初始化 explicit DollarAmount(int64_t totalPennies) : amount{totalPennies} {} // 其余类成员代码无需改动 // ... };
方案2:修改addInterest内的实例化逻辑(无需改动构造函数)
把addInterest函数中创建interest对象的代码,拆分成两个参数传给现有构造函数:
void addInterest(int rate, int divisor) { int64_t totalInterestPennies = (amount * rate + divisor / 2) / divisor; DollarAmount interest { totalInterestPennies / 100, totalInterestPennies % 100 }; add(interest); }
内容的提问来源于stack exchange,提问作者user15194704
相关产品推荐
相关产品推荐

