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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:36:04