Cygwin + MinGW + GCC 相談室 Part 8 (985レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
202
(3): 2016/07/02(土)17:08 ID:QBTa/uvw(1/2) AAS
過疎っているけど・・・質問させてください
Windows10Pro 64bit上にMSYS2をインストールしてMINGW64を主にシェルとして使っているのだけど
Linux上では正常に動いてMINGW64上ではSegmentation Faultになるプログラムが有るのです
どうもグローバル変数の宣言がうまく処理できていないようなんだけどコンパイルオプションとかで対処できないでしょうか?

ソースをコピペします
main.cpp-------------------------------------------
#include "class2.h"

int main( int argc, char *argv[] ) {
//Class2 object2;
return 0;
}
class1.h --------------------------------------------
#include <string>
#include <map>
class Class1 {
std::string type;
static std::map<std::string, Class1 *> map;
public:
Class1(std::string s);
~Class1();
};
class1.cpp -------------------------------------------
#include <iostream>
#include "class1.h"
Class1::Class1(std::string s) : type(s) {
std::cout << "Class1::Class1 type=" << type << std::endl;
map[type] = this;
}
std::map<std::string, Class1 *> Class1::map;
Class1::~Class1() {}
203: 202 2016/07/02(土)17:11 ID:QBTa/uvw(2/2) AAS
続き・・・
class2.h ------------------------------------------
class Class2 {
public:
Class2();
};

class2.cpp ---------------------------------------
#include <iostream>
#include "class2.h"

//std::map<std::string, Class1 *> Class1::map;
#include "class1.h"
Class1 object1("XXX");

Class2::Class2() {
std::cout << "Class2::Class2 " << std::endl;
}

以上です
205
(1): 2016/07/02(土)21:18 ID:k5Obze0x(1) AAS
>>202
規格では異なる翻訳単位(class1.cpp, class2.cpp)で定義されてる 
静的記憶期間を持つオブジェクト(Class1::map, object1)の初期化順序は未定

コンパイルオプションでどうにかなるものじゃないので設計を見直す・ソースを修正する
208
(1): 202 2016/07/02(土)22:05 ID:Pv/FT/v3(1) AAS
>>204-207
レス有難う御座います。
人がいないと思ったら居るんですね。ありがたや

>>205
そうですか、あるアプリケーションをコンパイルしたら上記のソースのような箇所が有りまして・・・
姑息ですがグローバル変数の定義を直前に書いて凌ごうと思います。
よく分からないのがstd::mapではエラーになるけどstd::stringだと動いたりするんですよね
実際のソースではQMapの箇所で引っかかったりしています
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.034s