运行以下代码时出现“分段错误 11”错误。代码实际上可以编译,但我在运行时收到错误。
//** Terror.h **
#include <iostream>
#include <string>
#include <map>
using std::map;
using std::pair;
using std::string;
template<typename Tsize>
class Terror
{
public:
//Inserts a message in the map.
static Tsize insertMessage(const string& message)
{
mErrorMessages.insert( pair<Tsize, string>(mErrorMessages.size()+1, message) );
return mErrorMessages.size();
}
private:
static map<Tsize, string> mErrorMessages;
};
template<typename Tsize>
map<Tsize,string> Terror<Tsize>::mErrorMessages;
//** 错误.h **
#include <iostream>
#include "Terror.h"
typedef unsigned short errorType;
typedef Terror<errorType> error;
errorType memoryAllocationError=error::insertMessage("ERROR: out of memory.");
//** main.cpp **
#include <iostream>
#include "error.h"
using namespace std;
int main()
{
try
{
throw error(memoryAllocationError);
}
catch(error& err)
{
}
}
我对代码进行了某种调试,并且在将消息插入静态映射成员时发生了错误。一个观察是,如果我把这条线:
errorType memoryAllocationError=error::insertMessage("ERROR: out of memory.");
在“main()”函数内部而不是在全局范围内,那么一切正常。但我想在全局范围内扩展错误消息,而不是在本地范围内。该映射是静态定义的,因此所有“错误”实例共享相同的错误代码和消息。你知道我怎么能得到这个或类似的东西。
非常感谢你。