Нарушение прав доступа при вставке элемента в глобальную карту
Я пытался отлаживать это в течение нескольких часов без удачи. Я знаю, что вы, ребята, решите проблему в течение нескольких минут, поэтому вот ситуация:
У меня есть ~ 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;".
Спасибо!