我一直在想,现在没有运气调试这几个小时。 我知道你们会解决分钟内的问题,所以这里的情况:
我有〜400的.cpp / .h文件名为ProblemX.cpp / ProblemX.h(其中X是从1到400)。 每个文件都包含了数学相关问题的解决方案。 我想有这些问题在编译时自己注册到一个独特的密钥的全球地图(只是一个int将工作),并具有值是一个指针揭开序幕数学问题的解决方案的功能。
全球地图的建立与所谓Problem.h / Problem.cpp文件处理。 然而,我发现了一个“访问冲突读取位置0x00000004”时,第一个问题试图在地图上自行注册。 代码如下:
在ProblemX.h文件(问题1揭开序幕这个问题的解决方案):
#ifndef PROBLEM1_H
#define PROBLEM1_H
#include "Problems.h"
#include <string>
std::string problem1();
static int rc1 = registerProblem(1, problem1);
#endif
在Problems.h文件(problemFinder是使用全球地图调用相应的函数指针的函数):
#ifndef PROBLEMS_H
#define PROBLEMS_H
#include <string>
int registerProblem(int problemNum, std::string (*problemFunc)(void));
std::string problemFinder(int problemNum);
#endif
在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;
}
发生访问冲突,其中 “problems_map [problemNum] = problemFunc;”。
谢谢!