g++ 4.3 と Rogue Wave ライブラリを使用して、Linux システムで簡単なテスト プログラムを作成しています。ここで直面している問題は、次のコードはコンパイルできるが、実行するとこの行でセグメンテーション違反が発生することです。
aCC コンパイラを使用して、HPUX マシンで同じコードを実行したとき。それは私を混乱させるスムーズに実行されます。それは、g++ が静的変数を初期化する方法が aCC とは異なるためですか? ここで何が起こっているか知っている人はいますか?前もって感謝します。
A.hxx
#include <rw/tvhdict.h>
#include <rw/cstring.h>
#include <rw/rwdate.h>
#include <rw/rstream.h>
using namespace std;
class A
{
public :
A();
static void add();
struct long_hash {
unsigned long operator() (const long& x) const { return x;};
};
struct long_equal {
RWBoolean operator() (const long& x, const long& y) const { return x==y;};
};
private:
static RWTValHashMap<long, long, long_hash, long_equal> _aClasses;
};
A.cxx
#include "A.hxx"
RWTValHashMap<long, long, A::long_hash, A::long_equal> A::_aClasses;
A::A()
{
cout<<"init A"<<endl;
}
void A::add()
{
_aClasses.insertKeyAndValue(100,1000);
}
B.hxx
class B
{
public:
B();
};
B.cxx
#include "B.hxx"
#include "A.hxx"
B::B()
{
A::add();
}
メイン.cxx
#include "A.hxx"
#include "B.hxx"
static B c;
int main() {
cout<<"main"<<endl;
return 0;
}