-1
このコードにランタイムエラーがある理由を教えてください。 addEmployee()関数が問題だと思います。 C++ - ランタイムエラー:ベクトルpush_back()
#include <iostream>
#include <vector>
#include <string>
using namespace std;
enum EmployeeLevel {fresh, sophomore, junior, senior};
class Employee {
string name;
EmployeeLevel level;
public:
Employee(const string & _name, const EmployeeLevel _level)
: name(_name) {
level = _level;
}
Employee(const Employee & employee) {
name = employee.name;
level = employee.level;
}
void changeLevel() {
level = static_cast<EmployeeLevel> (level + 1);
}
};
class Manager: public Employee {
vector<Employee *> group;
public:
Manager(const string & _name, const EmployeeLevel _level)
: Employee(_name, _level) {}
~Manager() {
for (vector<Employee *>::iterator it = group.begin(); it != group.end(); ++it)
delete *it;
}
void addEmployee(Employee * employee) {
group.push_back(employee);
}
};
int main(void)
{
Employee e1("홍", fresh), e2("김", sophomore), e3("차", fresh);
Manager m1("Tom", senior);
m1.addEmployee(&e1);
}
I機能を変更する場合
(addEmployee())以下に示すように、しないエラー。 しかし、 "push_back(従業員)"を使用すると実行時エラーが発生する理由を知りたいのですが。void addEmployee(Employee * employee) {
Employee * tempEmployee = new Employee(*employee);
group.push_back(tempEmployee);
}
私はDev-C++を使います。バージョン5.11 – doubleU
あなたの問題ではありませんが、 'Manager'のデフォルトのコピーコンストラクタは_pointers_を' group'にコピーします。それは '〜Manager'がそれらを2回削除するので、悪いことです。解決策: 'Manager(Manager const&)= delete'はそのデフォルトコピーctorを削除します。 – MSalters