静的メンバ変数について

[戻る]
ぬる 2010/03/05(金) 08:46:00
質問します。

静的メンバ変数についてですが
親のヘッダファイルで宣言した静的メンバ変数
例えば

static CString str;
を親のcppファイルで
str = "abc";
とセットします。
このstrの値を他のcppファイルで参照するにはどのように書き込むのでしょうか?
調べたところ他のcppファイルで
親クラス::str;
のように参照できるとありましたが、ダメでした。

どのようにすれば他のcppファイルで参照可能になるのでしょうか?教えてください

Blue 2010/03/05(金) 09:15:37
>のように参照できるとありましたが、ダメでした。
どういうことでしょうか?

クラスのメンバとして静的変数を持っていれば

hoge.h

class CHoge {
public:
    static CString str;
}:

hoge.cpp

CString CHoge::str = "abc";

として、

moge.cpp

CString s = CHoge::str;

というように使えます。

ryo 2010/03/05(金) 09:34:41
まず、ビルドしたときの、エラーは何がでたのでしょうか?

また、「他のcpp」から、親クラスのヘッダーファイルへのincludeは
きちんとしてますでしょうか?

ぬる 2010/03/05(金) 09:48:08
Blueさん
同じようにしましたが
CHoge::ss 再定義されました
とエラーが出てしまいます。

ryoさん
include等は問題ありません

ぬる 2010/03/05(金) 09:59:33
Blueさん
hoge.cppを
CString str = "abc"
としてmoge.cppで
CString s = CHoge::str;
として扱おうとすると
外部シンボルが未解決ですのエラーが出てしまいます。
どうしてでしょうか?

aetos 2010/03/05(金) 10:02:01
どういうコードを書いているのか、問題になっている最小限のコードを掲載してみて
は。数行でしょうし。

Blue 2010/03/05(金) 11:58:27
>hoge.cppを
>CString str = "abc"
これが違うのでは?
ちゃんとクラス名::を付けてください。
つけないと単なるグローバル変数になるだけで、クラス名::strとは別物になり、
クラス名::strの定義がなくて
>外部シンボルが未解決ですのエラー
となります。

ryo 2010/03/05(金) 12:09:56
そもそも
静的メンバ変数には、クラスの中にかく宣言とは別に実体の定義が必要
ってことをきちんと理解してないのではないでしょうか?


>CHoge::ss 再定義されました
どこでやったかわからないが、
もしhファイルでやったら、hoge.cppと、別.cppの両方からIncludeされて
二回定義されることになります


hoge.h:宣言  static CString str;
hoge.cpp:定義  CString Choge::str;
別.cpp:使用   Choge::str  = "abc";

でやってみてください

古いスレッドには追加発言できません。