Violación de acceso al insertar un elemento en el mapa global

He estado tratando de depurar esto por horas sin suerte. Sé que ustedes resolverán el problema en cuestión de minutos, así que aquí está la situación:

Tengo ~ 400 archivos .cpp / .h llamados ProblemX.cpp / ProblemX.h (donde X es un número del 1 al 400). Cada archivo contiene la solución para un problema relacionado con las matemáticas. Me gustaría que los problemas se registren ellos mismos en tiempo de compilación en un mapa global con una clave única (solo un int funcionará) y que el valor sea un indicador de la función que inicia la solución de problemas matemáticos.

El mapa global se crea y se maneja en archivos llamados Problem.h / Problem.cpp. Sin embargo, me aparece una "Ubicación de lectura de infracción de acceso 0x00000004" cuando el primer problema intenta registrarse automáticamente en el mapa. El código es el siguiente:

En los archivos ProblemX.h (problem1 inicia la solución para este problema):

#ifndef PROBLEM1_H
#define PROBLEM1_H

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

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

#endif

En el archivo Problems.h (problemFinder es la función que usa el mapa global para llamar al puntero de función apropiado):

#ifndef PROBLEMS_H
#define PROBLEMS_H

#include <string>

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

#endif

En 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;
}

La infracción de acceso ocurre cuando "problems_map [problemNum] = problemFunc;".

¡Gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta