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!