我在同一个文件employee
和employeeException
中有两个类。如果我为employee
定义构造函数,我将无法为employeeException
定义构造函数,反之亦然。尝试为classess定义构造函数会导致以下编译错误:
没有与员工匹配的函数调用
#include <iostream>
#include <string>
using namespace std;
class employee
{
public:
double operator + (employee);
bool operator == (employee);
employee(int);
double getSalary();
private:
double salary;
};
class employeeException
{
public:
employeeException(string);
void printmessage();
private:
employee e;
string message;
};
int main()
{
employee A(400);
employee B(400);
employee C = A+B;
if ( A == B)
{
cout<<"Yes";
}
else
{
cout<<"No";
}
cout<<C.getSalary();
}
employee::employee(int salary)
{
this->salary = salary;
}
double employee::operator + (employee e)
{
double total;
total = e.salary + this->salary;
return total;
}
double employee::getSalary()
{
return this->salary;
}
bool employee::operator == (employee e)
{
if ( e.salary == this->salary)
{
return true;
}
else
{
return false;
}
}
employeeException::employeeException(string message)
{
this->message = message;
}
void employeeException::printmessage()
{
cout<<endl
<<this->message
<<endl;
}
问题
1)从上面看,我们似乎无法在同一个文件中定义2个不同类的构造函数,有没有办法克服这个
2)有人可以解释为什么我们不能在同一个文件中定义2个不同类的构造函数
其他信息
我正在使用Quincy 2005来编译代码
您可以使用此在线编译器:http://www.compileonline.com/compile_cpp0x_online.php
结论 看来我必须添加默认的构造函数employee()才能使用它,感谢大家以某种方式帮助我
答案 0 :(得分:3)
您需要在employeeException的构造函数中调用employee的构造函数。
employeeException::employeeException(string message)
: employee(42)
{
...
}
因为一旦您声明了另一个,默认的员工构造函数就是私有的。
答案 1 :(得分:0)
我怀疑(但尚未确认)您的错误来自主要功能的第三行:
employee C = A + B;
右侧的表达式调用operator +(employee)方法,该方法返回一个double。左侧的表达式将尝试构造新的员工对象。但是,您尚未定义采用double的雇员构造函数(或者采用double的默认构造函数和赋值运算符)。只有一个采用整数。
最简单的解决方案可能是将构造函数更改为使用double参数而不是int,尤其是因为它无论如何都是作为double存储在类中。