Нарушение прав доступа при вставке элемента в глобальную карту

Я пытался отлаживать это в течение нескольких часов без удачи. Я знаю, что вы, ребята, решите проблему в течение нескольких минут, поэтому вот ситуация:

У меня есть ~ 400 .cpp / .h файлов с именем ProblemX.cpp / ProblemX.h (где X - это число от 1 до 400). Каждый файл содержит решение математической задачи. Я хотел бы, чтобы проблемы регистрировались во время компиляции в глобальную карту с уникальным ключом (будет работать только int), а значение должно быть указателем на функцию, которая запускает решение математической задачи.

Глобальная карта создается и обрабатывается в файлах с именем Problem.h / Problem.cpp. Тем не менее, я получаю «Место чтения нарушения доступа 0x00000004», когда первая проблема пытается самостоятельно зарегистрироваться на карте. Код выглядит следующим образом:

В файлах ProblemX.h (problem1 запускает решение этой проблемы):

#ifndef PROBLEM1_H
#define PROBLEM1_H

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

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

#endif

В файле Задачи.h (problemFinder - это функция, которая использует глобальную карту для вызова соответствующего указателя функции):

#ifndef PROBLEMS_H
#define PROBLEMS_H

#include <string>

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

#endif

В Задачах.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;
}

Нарушение доступа происходит там, где "problem_map [problemNum] = problemFunc;".

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос