0

运行以下代码时出现“分段错误 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()”函数内部而不是在全局范围内,那么一切正常。但我想在全局范围内扩展错误消息,而不是在本地范围内。该映射是静态定义的,因此所有“错误”实例共享相同的错误代码和消息。你知道我怎么能得到这个或类似的东西。

非常感谢你。

4

2 回答 2

2

当我尝试在 Mac OS X 10.7 上运行我为 OS X 10.8 编译的应用程序时,我遇到了同样的问题。

将目标设置为 10.7 解决了这个问题。该应用程序在 10.7 和 10.8 OS X 环境中运行良好。

于 2013-04-08T19:18:55.527 回答
0

您需要通过调用来确保mErrorMessages在使用它之前运行构造函数insertMessage。你可以以任何你想要的方式来做这件事,但你必须以某种方式去做。

于 2012-10-07T03:29:58.257 回答