gpt4 book ai didi

C++ : adding an object to a set

转载 作者:行者123 更新时间:2023-11-30 03:42:08 25 4
gpt4 key购买 nike

我在向集合中添加对象时遇到问题。

我在头文件中使用了两个类,一个用于员工,另一个用于经理。在经理类中,我想通过添加作为特定经理下属的员工来创建一组员工。首先,我创建了一个空集,我可以通过调用函数为其添加对象。

看起来如下:

头文件

#ifndef EMPLOYEE_HH
#define EMPLOYEE_HH

#include <set>
#include <string>
#include <iostream>

using namespace std ;

class Employee {
public:
// Constructor
Employee(const char* name, double salary) :
_name(name),
_salary(salary) {
}

// Accessors
const char* name() const {
return _name.c_str() ;
}
double salary() const {
return _salary ;
}

private:
string _name ;
double _salary ;

} ;

class Manager : public Employee {
public:
//Constructor
Manager(const char* _name, double _salary):
Employee(_name, _salary),
_subordinates() {
}

// Accessors/Modifiers
void addSubordinate(Employee& empl) {
_subordinates.insert(empl) ; // Error: no macthing function call for .insert()
}

private:
set<Employee*> _subordinates ;

} ;

#endif

主脚本

#include <string>
#include <iostream>
#include "Employee.hh"

using namespace std ;

int main() {

Employee emp = ("David", 10000) ;

Manager mgr = ("Oscar", 20000) ;

mgr.addSubordinate(emp);

return 0;

}

编译时出现错误,无法为 _subordinates.insert(empl) 调用匹配函数。

最佳答案

元素的类型 setEmployee* ,但您要插入 Employee .

您可能会更改 _subordinates.insert(empl);_subordinates.insert(&empl); .

(将 _subordinates 的类型从 set<Employee*> 更改为 set<Employee> 也可以修复编译器错误,但它似乎与请求不匹配。)

请注意,正如@KenmanTsang 指出的那样,使用从堆栈变量中获取的指针可能很危险。考虑使用 smart pointernew ,例如 std::set<std::unique_ptr<Employee>> _subordinates; .

顺便说一句:

Employee emp = ("David", 10000) ;
Manager mgr = ("Oscar", 20000) ;

应该是

Employee emp ("David", 10000) ;
Manager mgr ("Oscar", 20000) ;

或(自 c++11 起)

Employee emp = {"David", 10000} ;
Manager mgr = {"Oscar", 20000} ;

关于C++ : adding an object to a set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36956495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com