作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在向集合中添加对象时遇到问题。
我在头文件中使用了两个类,一个用于员工,另一个用于经理。在经理类中,我想通过添加作为特定经理下属的员工来创建一组员工。首先,我创建了一个空集,我可以通过调用函数为其添加对象。
看起来如下:
头文件
#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)
调用匹配函数。
最佳答案
元素的类型 set
是Employee*
,但您要插入 Employee
.
您可能会更改 _subordinates.insert(empl);
至 _subordinates.insert(&empl);
.
(将 _subordinates
的类型从 set<Employee*>
更改为 set<Employee>
也可以修复编译器错误,但它似乎与请求不匹配。)
请注意,正如@KenmanTsang 指出的那样,使用从堆栈变量中获取的指针可能很危险。考虑使用 smart pointer与 new
,例如 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/
我是一名优秀的程序员,十分优秀!