C++のSTL mapを使用するとセグメンテーション違反となる
こんにちは。C++でSTLのmapの簡単な使用テストを以下のプログラムで行っており、動作確認ができました。
/* Assoc_array.c */
#define MAIN
// (#include省略)
using namespace std;
namespace Usefuls {
class Assoc_array_str {
private:
map<string, string> _h;
public:
void set(string key, string val);
string get(string key);
};
void Assoc_array_str::set(string key, string val){
_h.insert(pair<string, string>(key, val));
}
string Assoc_array_str::get(string key){
map<string, string>::iterator p;
p = _h.find(key);
return p->second;
}
}
#ifdef MAIN
int main(){
Usefuls::Assoc_array_str assoc;
assoc.set("Konnichiwa", "Hello");
cout << assoc.get("Konnichiwa") << endl;
return 0;
}
#endif
/* ここまで */
しかし、これを以下のように他のファイルから呼び出すと(先頭の#define MAINを#undef MAINに変えます)、「セグメンテーション違反です」というメッセージが出てしまいます。
/* Aa_test1.c */
#include <iostream>
using namespace std;
namespace Usefuls {
class Assoc_array_str {
public:
void set(string, string);
string get(string);
};
}
int main(){
Usefuls::Assoc_array_str assoc;
assoc.set("Konnichiwa", "Hello");
cout << assoc.get("Konnichiwa") << endl;
return 0;
}
/* ここまで */
コンパイル方法は以下の通りです。
g++ -c Assoc_array.c
g++ Aa_test1.c Assoc_array.o
また、使用プラットホームはLinuxのCentOS 4.3です。
原因が分かる方、ご回答をよろしくお願いします。
お礼
あ、そういう単純な理由だったんですか。 というか、普通に考えればそうですよね。 ありがとうございました。