无法在同一文件中定义2个不同类的构造函数

时间:2013-11-28 03:21:57

标签: c++ class debugging exception constructor

我在同一个文件employeeemployeeException中有两个类。如果我为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()才能使用它,感谢大家以某种方式帮助我

2 个答案:

答案 0 :(得分:3)

您需要在employeeException的构造函数中调用employee的构造函数。

employeeException::employeeException(string message)
  : employee(42)
{
     ...
}

因为一旦您声明了另一个,默认的员工构造函数就是私有的。

答案 1 :(得分:0)

我怀疑(但尚未确认)您的错误来自主要功能的第三行:

employee C = A + B;

右侧的表达式调用operator +(employee)方法,该方法返回一个double。左侧的表达式将尝试构造新的员工对象。但是,您尚未定义采用double的雇员构造函数(或者采用double的默认构造函数和赋值运算符)。只有一个采用整数。

最简单的解决方案可能是将构造函数更改为使用double参数而不是int,尤其是因为它无论如何都是作为double存储在类中。