静的メンバ変数について – プログラミング – Home

静的メンバ変数について
 
通知
すべてクリア

静的メンバ変数について


ぬる
 ぬる
(@ぬる)
ゲスト
結合: 15年前
投稿: 8
Topic starter  

質問します。

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

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

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


引用解決済
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>のように参照できるとありましたが、ダメでした。
どういうことでしょうか?

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

hoge.h

class CHoge {
public:
static CString str;
}:

hoge.cpp

CString CHoge::str = abc;

として、

moge.cpp

CString s = CHoge::str;

というように使えます。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

まず、ビルドしたときの、エラーは何がでたのでしょうか?

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


返信引用
ぬる
 ぬる
(@ぬる)
ゲスト
結合: 15年前
投稿: 8
Topic starter  

Blueさん
同じようにしましたが
CHoge::ss 再定義されました
とエラーが出てしまいます。

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


返信引用
ぬる
 ぬる
(@ぬる)
ゲスト
結合: 15年前
投稿: 8
Topic starter  

Blueさん
hoge.cppを
CString str = abc
としてmoge.cppで
CString s = CHoge::str;
として扱おうとすると
外部シンボルが未解決ですのエラーが出てしまいます。
どうしてでしょうか?


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

どういうコードを書いているのか、問題になっている最小限のコードを掲載してみて
は。数行でしょうし。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

そもそも
静的メンバ変数には、クラスの中にかく宣言とは別に実体の定義が必要
ってことをきちんと理解してないのではないでしょうか?

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

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

でやってみてください


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました