我是编码的新手,我正在努力了解这个程序的错误:
class Company:public Employee{
private:
std::vector<Employee*> _table;
public:
Company& operator+=(const Employee* emp) {
_table.push_back(emp->clone());
return *this;
}
virtual Company* clone() const {
return new Company(*this);
}
virtual Company& setDescription(std::string des){
_des=des;
return *this;
}
主要有这个:
Company* company = new Company();
a = new DeveloperEmployee(description, project);
int id = a->getID();
cout << *a << endl; //Developer ID = 2, project = hw5
company += a;
我有这个错误:
error: invalid operands of types 'Company*' and 'DeveloperEmployee*' to binary 'operator+'|
答案 0 :(得分:2)
您正在应用运营商&#39; + =&#39;在指针到公司而不是公司实例或对实例的引用。
取消引用指针,例如(*company) += a;
将无怨无悔地编译。
请不要在指针上重载操作符,首先在const引用上重载,然后从中获取它。
答案 1 :(得分:0)
FWIW,使用
Company& operator+=(const Employee* emp) {
_table.push_back(emp->clone());
return *this;
}
向Employee
添加Company
是滥用+=
运算符的语义。
更好的选择是:
Company& addEmployee(const Employee& emp) {
_table.push_back(emp.clone());
return *this;
}
然后,您可以使用:
Company* company = new Company();
a = new DeveloperEmployee(description, project);
int id = a->getID();
cout << *a << endl; //Developer ID = 2, project = hw5
company->addEmployee(*a);
这将使代码更易于阅读和遵循。
进一步改善
不使用指向Employee
的指针列表,而是使用列表智能指针。
std::vector<std::share_ptr<Employee>> _table;
和
Company& addEmployee(std::shared_ptr<Employee> emp) {
_table.push_back(emp);
return *this;
}
并将其用作:
Company* company = new Company();
std::shared_ptr<Employee> a(new DeveloperEmployee(description, project));
int id = a->getID();
cout << *a << endl;
company->addEmployee(a);