質問します。
静的メンバ変数についてですが
親のヘッダファイルで宣言した静的メンバ変数
例えば
static CString str;
を親のcppファイルで
str = abc;
とセットします。
このstrの値を他のcppファイルで参照するにはどのように書き込むのでしょうか?
調べたところ他のcppファイルで
親クラス::str;
のように参照できるとありましたが、ダメでした。
どのようにすれば他のcppファイルで参照可能になるのでしょうか?教えてください
>のように参照できるとありましたが、ダメでした。
どういうことでしょうか?
クラスのメンバとして静的変数を持っていれば
hoge.h
class CHoge {
public:
static CString str;
}:
hoge.cpp
CString CHoge::str = abc;
として、
moge.cpp
CString s = CHoge::str;
というように使えます。
まず、ビルドしたときの、エラーは何がでたのでしょうか?
また、「他のcpp」から、親クラスのヘッダーファイルへのincludeは
きちんとしてますでしょうか?
Blueさん
同じようにしましたが
CHoge::ss 再定義されました
とエラーが出てしまいます。
ryoさん
include等は問題ありません
Blueさん
hoge.cppを
CString str = abc
としてmoge.cppで
CString s = CHoge::str;
として扱おうとすると
外部シンボルが未解決ですのエラーが出てしまいます。
どうしてでしょうか?
どういうコードを書いているのか、問題になっている最小限のコードを掲載してみて
は。数行でしょうし。
>hoge.cppを
>CString str = abc
これが違うのでは?
ちゃんとクラス名::を付けてください。
つけないと単なるグローバル変数になるだけで、クラス名::strとは別物になり、
クラス名::strの定義がなくて
>外部シンボルが未解決ですのエラー
となります。
そもそも
静的メンバ変数には、クラスの中にかく宣言とは別に実体の定義が必要
ってことをきちんと理解してないのではないでしょうか?
>CHoge::ss 再定義されました
どこでやったかわからないが、
もしhファイルでやったら、hoge.cppと、別.cppの両方からIncludeされて
二回定義されることになります
hoge.h:宣言 static CString str;
hoge.cpp:定義 CString Choge::str;
別.cpp:使用 Choge::str = abc;
でやってみてください