无法实例化抽象类c ++

mvx*_*xxx 1 c++ class abstract

我有这个代码的问题 - 这是taskData:

static std::map<int8_t, std::vector<Task>> taskData;
Run Code Online (Sandbox Code Playgroud)

并且有一个问题:

taskData.emplace(pi::enumerations::taskManager::taskCategory_t::SECURITY, std::vector<Task>{FirefightingTask()});
Run Code Online (Sandbox Code Playgroud)

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;
    };
}
Run Code Online (Sandbox Code Playgroud)

任务:

#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;
    };
}
Run Code Online (Sandbox Code Playgroud)

而错误是:

错误C2259'mc :: Task':无法实例化抽象类

我真的不知道为什么我会收到这个错误.当我删除此行时:

        taskData.emplace(pi::enumerations::taskManager::taskCategory_t::SECURITY,std::vector<Task>{FirefightingTask()});
Run Code Online (Sandbox Code Playgroud)

它没有问题:/

mol*_*ilo 5

罪魁祸首是std::vector<Task>- 你不能创建一个矢量,Task因为它Task是抽象的.

你需要使用指针向量.