【发布时间】:2025-12-13 14:50:02
【问题描述】:
我对这段代码有疑问 - 这是 taskData:
static std::map<int8_t, std::vector<Task>> taskData;
还有一个问题:
taskData.emplace(pi::enumerations::taskManager::taskCategory_t::SECURITY, std::vector<Task>{FirefightingTask()});
消防任务:
#pragma once
#include "Task.hpp"
namespace mc
{
class FirefightingTask :public Task
{
public:
FirefightingTask( uint8_t category = 0, uint8_t kind = 0, NPC* npc = nullptr );
virtual bool act() override;
};
}
任务:
#pragma once
#include "engine/Config.hpp"
#include <queue>
class NPC;
namespace mc
{
//Task
//Represents a task for AI object
class Task
{
public:
Task(uint8_t category = 0, uint8_t kind = 0, NPC* npc = nullptr );
uint8_t GetCategory()
{
return category;
}
uint8_t GetKind()
{
return kind;
}
bool operator==( const Task& second )
{
return this->kind == second.kind;
}
bool inProgress()
{
return doing;
}
virtual bool act() = 0;
private:
bool doing;
const int8_t category;
const int8_t kind;
NPC* owner;
};
}
错误是:
错误 C2259 'mc::Task':无法实例化抽象类
我真的不知道为什么会出现这个错误。当我删除这一行时:
taskData.emplace(pi::enumerations::taskManager::taskCategory_t::SECURITY,std::vector<Task>{FirefightingTask()});
它可以正常工作:/
【问题讨论】:
-
你需要
std::vector<Task*>或(更好)std::vector<std::shared_ptr<Task>>或std::vector<std::unique_ptr<Task>>。 -
当我把它改成 shared_prt 时,也有同样的问题 taskData.emplace(pi::enumerations::taskManager::taskCategory_t::SECURITY, std::vector<:shared_ptr>>{std::make_shared(FirefightingTask())});