Попытка сохранить указатель на абстрактный класс в карте C++

У меня есть программа, которая хранит указатель на абстрактный класс на карте, так что я могу использовать данные с карты для выполнения вызовов конкретных классов абстрактного класса (используя фабричный метод).

Он должен хранить указатель, так как класс абстрактный, но проблема в том, что когда я делаю указатель, я получаю ошибку

Нет подходящей функции-члена для вызова 'insert'

Мой код выглядит следующим образом:

Заголовок класса фабрики форм

#ifndef ShapeFactoryManager_hpp
#define ShapeFactoryManager_hpp

#include <stdio.h>
#include "ShapeFactory.h"
#include "CircleFactory.h"
#include "PolygonFactory.h"
#include "LineFactory.h"
#include <map>

class ShapeFactoryManager
{
public:
    ShapeFactoryManager();
    const static ShapeFactoryManager& getInstance();
    ShapeFactory createFactory(unsigned long shapeID) const;
    bool RegisterShape(unsigned long id, ShapeFactory* factory) const;

private:
    const std::map<unsigned long, ShapeFactory*>registrationTable;
};

#endif /* ShapeFactoryManager_hpp */

Руководитель фабрики форм.cpp

bool ShapeFactoryManager::RegisterShape(unsigned long id, ShapeFactory* factory) const
{
    registrationTable.insert(std::make_pair(id, factory));
    return true;
}

Ошибка возникает при:

registrationTable.insert(std::make_pair(id, factory)); 

1 ответ

std::map::insert не является константной функцией-членом. Вполне логично, что, если карта постоянна, мы не можем добавить или удалить ее.

Удалить const квалификатор registrationTable а также из RegisterShape, Если функция-член должна изменить состояние, она также не должна быть константной.

Другие вопросы по тегам