Невозможно определить конструктор 2 разных классов в одном файле

0

У меня есть 2 классов в одном файле employee и employeeException. Если я определяю конструктор для 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

Заключение Кажется, мне нужно добавить сотрудника-конструктора по умолчанию(), чтобы он работал, благодаря тому, что каждый помогал мне так или иначе

  • 3
    Там нет такого ограничения. Какую ошибку вы получаете? Одна проблема, которую я вижу, состоит в том, что employeeException содержит сотрудника, а сотрудник не имеет конструктора по умолчанию. Следовательно, создание исключений employeeException приведет к ошибке ... но это не имеет ничего общего с файлом, в котором реализован конструктор.
  • 1
    Должно сработать. Какую фактическую ошибку вы получаете?
Показать ещё 5 комментариев
Теги:
class
exception
debugging
constructor

2 ответа

3
Лучший ответ

Вы должны вызвать конструктор сотрудника в конструкторе employeeException.

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

Поскольку конструктор сотрудника по умолчанию является закрытым, как только вы объявляете другой.

  • 0
    employeeException не является подклассом работника.
  • 1
    @ John3136: employeeException имеет члена employee , а employee не имеет конструктора по умолчанию, поэтому этот член может быть создан только с использованием списка инициализации.
Показать ещё 3 комментария
0

Я подозреваю (но не подтвердил), что ваша ошибка исходит из третьей строки в вашей основной функции:

employee C = A + B;

Выражение справа вызывает метод operator+ (сотрудник), который возвращает double. Выражение слева будет пытаться построить новый объект employee. Однако вы не определили конструктор сотрудника, который принимает двойной (или стандартный конструктор и оператор присваивания, который принимает двойной). Существует только один, который принимает целое число.

Самое простое решение, вероятно, состоит в том, чтобы сменить конструктор на использование двойного параметра вместо int, особенно потому, что он сохраняется как двойной внутри класса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню