C++ "没有合适的构造函数可以从<默认构造函数>转换为参数化构造函数

C++ "No suitable constructor exists to convert from <default constructor> to parameterized constructor

本文关键字:构造函数 lt 默认 转换 参数 gt C++      更新时间:2023-10-16

我很抱歉问这个问题,因为它可能在这里的某个地方得到了回答,但到目前为止我的搜索都没有结果。

如果我使用参数化构造函数,我可以将我的类对象传递给我的输出函数,一切都很好。 如果我使用默认构造函数,它会失败并显示:

1>c:<path>project_04.cpp(152): error C2664: 'printCheck' : cannot convert parameter 1 from 'AdamsEmployee (__cdecl *)(void)' to 'AdamsEmployee'
1>          No constructor could take the source type, or constructor overload resolution was ambiguous

当我尝试将对象传递给输出函数时,我的对象的鼠标悬停显示:

Error: No suitable constructor exists to convert from "AdamsEmployee ()" to "AdamsEmployee"

这是我的默认构造函数:

AdamsEmployee::AdamsEmployee()
{
    AdamsEmployee::employeeNumber = -1;
    AdamsEmployee::employeeName = "";
    AdamsEmployee::employeeAddress = "";
    AdamsEmployee::employeePhone = "";
    AdamsEmployee::employeeHourlyWage = 0.0;
    AdamsEmployee::employeeHoursWorked = 0.0;
}

这是我的参数化构造函数:

AdamsEmployee::AdamsEmployee(int employeeNumber, string employeeName, string
employeeAddress, string employeePhone, double employeeHourlyWage,
doubleemployeeHoursWorked )
{
    AdamsEmployee::employeeNumber = employeeNumber;
    AdamsEmployee::employeeName = employeeName;
    AdamsEmployee::employeeAddress = employeeAddress;
    AdamsEmployee::employeePhone = employeePhone;
    AdamsEmployee::employeeHourlyWage = employeeHourlyWage;
    AdamsEmployee::employeeHoursWorked = employeeHoursWorked;
}

调用输出的行:

printCheck( emp1 );

输出功能:

void printCheck( AdamsEmployee employee )
{
// Display the mock paycheck.
cout << "----------------------------------H&H Systems----------------------------------" << endl;
cout << "nPay to the order of " << employee.getName() << ".....$" << employee.calcPay() << endl;
// Display the simulated paystub.
cout << "nGoliath National Bank" << endl;
cout << "-------------------------------------------------------------------------------" << endl;
cout << "Hours worked: " << employee.getHoursWorked() << endl;
cout << "Hourly wage: " << employee.getWage() << endl;
} // End printCheck()

如果我添加参数,一切正常。 搜索返回许多似乎不适用的情况。 您需要更多信息吗?

我做错了什么?

编辑:感谢所有的帮助!

您的错误表明您正在传递一个函数,就好像您被声明为 AdamsEmployee emp1() 一样。 正如一条评论所提到的,这可能是由于解析歧义。 它是如此普遍,以至于它有一个完整的堆栈溢出标签:https://stackoverflow.com/questions/tagged/most-vexing-parse

您可能缺少默认构造函数类中构造函数的声明。