У меня есть 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
Заключение Кажется, мне нужно добавить сотрудника-конструктора по умолчанию(), чтобы он работал, благодаря тому, что каждый помогал мне так или иначе
Вы должны вызвать конструктор сотрудника в конструкторе employeeException.
employeeException::employeeException(string message)
: employee(42)
{
...
}
Поскольку конструктор сотрудника по умолчанию является закрытым, как только вы объявляете другой.
employeeException
имеет члена employee
, а employee
не имеет конструктора по умолчанию, поэтому этот член может быть создан только с использованием списка инициализации.
Я подозреваю (но не подтвердил), что ваша ошибка исходит из третьей строки в вашей основной функции:
employee C = A + B;
Выражение справа вызывает метод operator+ (сотрудник), который возвращает double. Выражение слева будет пытаться построить новый объект employee. Однако вы не определили конструктор сотрудника, который принимает двойной (или стандартный конструктор и оператор присваивания, который принимает двойной). Существует только один, который принимает целое число.
Самое простое решение, вероятно, состоит в том, чтобы сменить конструктор на использование двойного параметра вместо int, особенно потому, что он сохраняется как двойной внутри класса.