次のコードを実行すると、「セグメンテーション違反 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()」関数内で、すべて正常に動作します。しかし、ローカル スコープではなく、グローバル スコープでエラー メッセージを拡張したいと考えています。「エラー」のすべてのインスタンスが同じエラー コードとメッセージを共有するように、マップは静的に定義されます。これや似たようなものをどうやって手に入れることができるか知っていますか。
どうもありがとうございました。