c++ - 不能实例化抽象类c++

标签 c++ class abstract

我对这段代码有疑问 - 这是 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;
    };
}

错误是:

Error C2259 'mc::Task': cannot instantiate abstract class

我真的不知道为什么会出现这个错误。当我删除此行时:

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

它没有问题:/

最佳答案

罪魁祸首是std::vector<Task> – 你不能创建 Task 的 vector 自 Task是抽象的。

您需要使用指针 vector 。

关于c++ - 不能实例化抽象类c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42872649/

相关文章:

c++ - g++ 总是向后兼容 "older"静态库?

c++ - close() 抛出什么异常类型?

c++ - Eclipse 提示递归函数调用

java - JLS 如何指定术语 "abstract method"、 "concrete method"和 "default method"?

c++ - 基类和子类 "using Shared = std::shared_ptr<>"的问题

c++ - 打印时指向常量的指针与指向非常量的指针的行为不同

java - RGB到灰度,java中的bmp图像

Java:如何从 String 创建类列表

java - 从抽象类 toString 方法扩展的类不起作用 :/

python - django抽象模型继承导入