Naruszenie zasad dostępu podczas wstawiania elementu do mapy globalnej

Próbowałem debugować to od wielu godzin bez powodzenia. Wiem, że rozwiążecie ten problem w ciągu kilku minut, więc oto sytuacja:

Mam ~ 400 plików .cpp / .h o nazwie ProblemX.cpp / ProblemX.h (gdzie X to liczba od 1 do 400). Każdy plik zawiera rozwiązanie problemu związanego z matematyką. Chciałbym, aby problemy rejestrowały się w czasie kompilacji na mapie globalnej z unikalnym kluczem (po prostu działa int) i ma wartość będącą wskaźnikiem do funkcji, która uruchamia rozwiązanie problemu matematycznego.

Mapa globalna jest tworzona i obsługiwana w plikach o nazwie Problem.h / Problem.cpp. Otrzymuję jednak „0x00000004 lokalizacja odczytu naruszenia zasad dostępu”, gdy pierwszy problem próbuje zarejestrować się na mapie. Kod jest następujący:

W plikach ProblemX.h (problem1 uruchamia rozwiązanie tego problemu):

#ifndef PROBLEM1_H
#define PROBLEM1_H

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

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

#endif

W pliku Problems.h (problemFinder jest funkcją, która używa mapy globalnej do wywołania odpowiedniego wskaźnika funkcji):

#ifndef PROBLEMS_H
#define PROBLEMS_H

#include <string>

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

#endif

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

Naruszenie dostępu występuje, gdy „problems_map [problemNum] = problemFunc;”.

Dzięki!

questionAnswers(3)

yourAnswerToTheQuestion