Violação de acesso ao inserir elementos no mapa global

Eu tenho tentado depurar isso por horas agora sem sorte. Eu sei que vocês vão resolver o problema em questão de minutos, então aqui está a situação:

Eu tenho ~ 400 arquivos. Cpp / .h chamado ProblemX.cpp / ProblemX.h (onde X é um número de 1 a 400). Cada arquivo contém a solução para um problema relacionado à matemática. Eu gostaria de ter os problemas registrar-se em tempo de compilação para um mapa global com uma chave exclusiva (apenas um int funcionará) e ter o valor ser um ponteiro para a função que inicia a solução de problema de matemática.

O mapa global é criado e manipulado em arquivos chamados Problem.h / Problem.cpp. No entanto, estou recebendo um "local de leitura de violação de acesso 0x00000004" quando o primeiro problema tenta se registrar no mapa. O código é o seguinte:

Nos arquivos ProblemX.h (problema1 inicia a solução para esse problema):

#ifndef PROBLEM1_H
#define PROBLEM1_H

#include "Problems.h"
#include <string>

std::string problem1();
static int rc1 = registerProblem(1, problem1);

#endif

No arquivo Problems.h (problemFinder é a função que usa o mapa global para chamar o ponteiro de função apropriado):

#ifndef PROBLEMS_H
#define PROBLEMS_H

#include <string>

int registerProblem(int problemNum, std::string (*problemFunc)(void));
std::string problemFinder(int problemNum);

#endif

Em Problems.cpp:

#include "Problems.h"
#include <iostream>
#include <map>

using namespace std;

map<int,std::string (*)(void)> problems_map;

int registerProblem(int problemNum, string (*problemFunc)(void)) {
    int rc = 0;
    problems_map[problemNum] = problemFunc;
    return rc;
}


string problemFinder(int problemNum) {
    string retStr = "";
    retStr = problems_map[problemNum]();
    return retStr;
}

A violação de acesso ocorre onde "problems_map [problemNum] = problemFunc;".

Obrigado!

questionAnswers(3)

yourAnswerToTheQuestion