【问题标题】:Unable to define constructor of 2 different class in the same file无法在同一文件中定义 2 个不同类的构造函数
【发布时间】:2013-11-28 03:21:57
【问题描述】:

我在同一个文件 employeeemployeeException 中有 2 个类。如果我为 employee 定义构造函数,我将无法为 employeeException 定义构造函数,反之亦然。尝试为这两个类定义构造函数会导致以下编译错误:

没有对员工的匹配函数调用

#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() 才能工作,感谢大家以一种或另一种方式帮助我

【问题讨论】:

  • 没有这样的限制。您收到的错误是什么?我看到的一个问题是employeeException 包含一个员工,而员工没有默认构造函数。因此,构造一个employeeException会产生一个错误......但这与实现构造函数的文件无关。
  • 应该可以。你得到的实际错误是什么?
  • 哪一行出现错误?
  • 在employeeException::employeeException(string message) { this->message = message; }
  • 您可以复制粘贴代码并取消注释行以查看错误

标签: c++ class debugging exception constructor


【解决方案1】:

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

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

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

【讨论】:

  • employeeException 不是雇员的子类。
  • @John3136:employeeException有一个employee成员,而employee没有默认构造函数,所以只能使用初始化列表来构造成员。
  • 是的 - 你找到我了。离开 C++ 的时间太长了
【解决方案2】:

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

employee C = A + B;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2014-08-01
    • 2012-06-22
    • 2021-10-01
    • 2014-03-12
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多