2013-11-28 2 views
0

У меня есть 2 класса в одном файле employee и employeeException. Если я определяю конструктор для employee, я не смогу определить конструктор для employeeException, наоборот. Пытаясь определить конструкторы для обоих classess вызовет следующую ошибку компиляции:Невозможно определить конструктор 2 разных классов в одном файле

не вызов функции соответствия сотруднику

#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 содержит сотрудника, а у сотрудника нет конструктора по умолчанию. Следовательно, при построении исключения employee возникла бы ошибка ... но это не имеет ничего общего с файлом, в котором реализован конструктор. – sbaker

+1

Должен работать. Какова фактическая ошибка, которую вы получаете? – John3136

+1

какая линия вы получаете ошибку? – user1810087

ответ

3

Вам нужно вызвать конструктор сотрудника в конструкторе исключения employee.

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

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

+0

employeeException не является подклассом сотрудника. – John3136

+1

@ John3136: 'employeeException' имеет член' employee', а 'employee' не имеет конструктора по умолчанию, поэтому член может быть создан только с использованием списка инициализации. –

+0

@ John3136 это список инициализаторов членов ... – LumpN

0

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

employee C = A + B; 

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

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

Смежные вопросы