程序中"..."不用管它
#include ...
class Task {
public:
Task(int id) : id_(id) {}
int getID() { return id_; }
std::string getName() { return "Task"; }
virtual bool checkTimeout() { return false; }
private:
int id_;
};
class UDPTask : public Task {
public:
UDPTask(int id) : Task(id) {}
std::string getName() { return "UDPTask"; }
bool checkTimeout() { ... }
...
};
class TCPTask : public Task {
public:
TCPTask(int id) : Task(id) {}
std::string getName() { return "TCPTask"; }
bool checkTimeout() { ... }
...
};
class TaskManager {
public:
void addTask(Task t) {
task_map_[t.getID()] = t;
}
void removeTask(Task t) {
task_map_.erase(t.getID());
}
void checkTimeout() {
std::map<int, Task>::iterator it = task_map_.begin();
for (; it != task_map_.end(); ++it) {
if (it->second.checkTimeout()) {
printf("%s timeout->remove it", it->second.getName());
task_map_.erase(it);
}
}
}
private:
std::map<int, Task> task_map_;
};
其实报错的本质原因是,你的成员函数里面有Task t这样的形参,总之是这样一个成员函数出错了,
void addTask(Task t) {
task_map_[t.getID()] = t;
}
task_map_[t.getID()]是要调用默认构造的,但你却没有默认构造...
你的代码有什么问题呢?需要怎么修改都没有说
#if 1
#include
#include
using namespace std;
class Task {
public:
//此处缺少默认构造,一旦有用户自定义构造,编译器就不会再生成默认构造...我加了默认构造
Task(){}
Task(int id) : id_(id) {}
int getID() { return id_; }
std::string getName() { return "Task"; }
virtual bool checkTimeout() { return false; }
private:
int id_;
};
class UDPTask : public Task {
public:
UDPTask(int id) : Task(id) {}
std::string getName() { return "UDPTask"; }
bool checkTimeout() { }
};
class TCPTask : public Task {
public:
TCPTask(int id) : Task(id) {}
std::string getName() { return "TCPTask"; }
bool checkTimeout() { }
};
class TaskManager {
public:
void addTask(Task t) {
task_map_[t.getID()] = t;
}
void removeTask(Task t) {
task_map_.erase(t.getID());
}
void checkTimeout() {
std::map::iterator it = task_map_.begin();
for (; it != task_map_.end(); ++it) {
if (it->second.checkTimeout()) {
printf("%s timeout->remove it", it->second.getName());
task_map_.erase(it);
}
}
}
private:
std::map task_map_;
};
int main()
{
return 0;
}
#endif