我運行以下代碼時出現「段錯誤11」錯誤。該代碼實際上編譯,但我在運行時得到錯誤。MacOS中的分段錯誤11 X- C++
// ** ** 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;
// ** ** error.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()」函數,而不是在全局範圍內,那麼一切工作正常。但是我想在全球範圍擴展錯誤信息,而不是在本地範圍。該映射被定義爲靜態的,以便所有「錯誤」實例共享相同的錯誤代碼和消息。你知道我怎麼能得到這個或類似的東西。
非常感謝。
您發佈的代碼不能編譯。請修復它。 –
對不起,我還沒有看到你的評論,現在已經更正。問題是「;」之後定義了Terror <>類。謝謝。 –
它仍然不編譯,因爲沒有'Terror'的構造函數需要'Tsize'作爲參數。 –