доступ к статической карте из статической функции-члена - ошибка сегментации - C ++

Я пытаюсь реализовать шаблон фабрики, регистрируя указатели функций производного класса на фабрику на статической карте (член фабрики) и создавая объекты, просматривая карту. Но при этом я получаю ошибку сегментации.

Фрагмент кода:

factory.cpp

typedef Shape* (*Funcptr)();

std::map<int,Funcptr> Factory::funcmap;

int Factory::registerCreator(int ShapeID, Shape *(*CFuncptr)()) {
    Factory::funcmap[ShapeID] = CFuncptr;
return 1;
} 

Shape* Factory::CreateObject(int ShapeID) {
    std::map<int,Funcptr>::iterator iter;
    iter = funcmap.find(ShapeID);
    if(iter != funcmap.end()){
        return iter->second();
    }
    return NULL;
}

factory.h

class Factory {
public:
    Factory();
    virtual ~Factory();
    static int registerCreator(int, Shape *(*CFuncptr)());
    Shape* CreateObject(int);
private:
    static  std::map<int,Funcptr> funcmap;
};

Square.cpp

static Shape *SquareCreator() { 
    return new Square; 
}
static int SquareAutoRegHook = Factory::registerCreator(1,SquareCreator);

При создании объекта Factory в основном файле возникает ошибка сегментации. Подскажите, пожалуйста, если я что-то делаю не так. Я использую CppUTest для TDD и не знаю, как это отладить.

5
задан Kerrek SB 8 November 2011 в 22:12
поделиться