C++实现嵌套STRUCT时调用Date::showdata报C2660无参错误问题
错误原因
- 你定义的
Date::showdata成员函数声明要求传入6个入参,分别是int empid, string name, double salary, int year, int month,int date,但你在主函数调用时没有传入任何参数,参数数量不匹配,直接触发C2660报错。 - 代码设计逻辑存在不合理性:
showdata负责打印员工全量信息,不属于Date结构体的职责范围;同时你输入的所有数据都存在Employee e对象中,单独声明的Date d没有绑定任何有效数据,就算补全参数调用也不符合封装逻辑。
解决方案
推荐使用符合封装逻辑的修改方案,将showdata方法迁移到Employee结构体中,直接访问自身成员不需要额外传参,修改后的完整代码如下:
// 原代码缺失必要头文件,需要补上 #include <iostream> #include <string> using namespace std; struct Date { int year, month, date; }; struct Employee { int empid; string name; double salary; Date joiningdate; void showdata() { cout << "\t\tEmployee's Data:\n"; cout << "Employee ID --> " << empid << endl; cout << "Employee Name --> " << name << endl; cout << "Salary --> " << salary << endl; cout << "Joining Date --> " << joiningdate.date << "-" << joiningdate.month << "-" << joiningdate.year << endl; } }; int main() { Employee e; cout << "Enter Employee ID = "; cin >> e.empid; cout << "Enter Employee Name = "; cin >> e.name; cout << "Enter Salary = "; cin >> e.salary; cout << "Enter Employee joining year = "; cin >> e.joiningdate.year; cout << "Enter Employee joining month = "; cin >> e.joiningdate.month; cout << "Enter Employee joining date = "; cin >> e.joiningdate.date; // 直接调用员工对象的打印方法即可 e.showdata(); return 0; }
如果不想调整方法所属结构,也可以直接在调用时补全所有要求的参数,将主函数最后一行替换为:
d.showdata(e.empid, e.name, e.salary, e.joiningdate.year, e.joiningdate.month, e.joiningdate.date);
该方案仅能解决编译报错,不符合面向对象设计规范,不推荐使用。
内容的提问来源于stack exchange,提问作者Dororo
相关产品推荐
相关产品推荐

