C++のグローバル変数がクラスをまたぐと初期化される
現象につきまして、
大変初歩的ではありますが教えていただけますと幸いです。
A.h
static int a;
class A
{
...
}
B.cpp
a=1;//aは1になる
C* C = new C(); result = C->Cmethod();
C.cpp
Cmethod
{
a;//aは0になっている
}
以上のような3つのファイルが同じプロジェクトにあるとき、
A.hにて、関数の外側で宣言されたstatic int aは、
グローバル変数として、どのクラスからでも参照でき、
全処理を通じて、値が保持されているものと個人的には
思っておりました。
しかし、B.cppでaの値を変更しても、C.cppに移ると、その変更は保持されず、
aの値は初期化されてしまっているようです。
しかしながら、a.hにおけるaの宣言を消してみると、B.cppでもC.cppでも
エラーが出ることから、B.cppでもC.cppでもA.hで宣言されたグローバル変数aを
参照しているように思われます。
この状況についての納得のいく説明がgoogle上で見つかりませんでしたので、
大変初歩的ではありますが教えていただけますと幸いです。
また、解決方法(変数を保持する方法)を教えていただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/03 02:55
2016/09/03 03:02
2016/09/03 03:09
2016/09/03 03:18
2016/09/03 03:31