staticなメンバ関数の使い方 – プログラミング – Home

staticなメンバ関数の使い方
 
通知
すべてクリア

[解決済] staticなメンバ関数の使い方


はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

////////////////////////////////////////////////////////////////////////////////

開発環境 : Visual C++ 6.0 Service Pack 3
動作環境 : Windows 98 Second Edition
MFC使用 MDIベース

////////////////////////////////////////////////////////////////////////////////

staticなメンバ変数にstaticなメンバ関数を使って値を代入したいのですが、
どうすればよいでしょうか。

現在、2つのクラスが次のようになっています。

//CXXX.h
class CXXX : public CObject
{
public:
static void SetParam(CParameter* pParam)
{m_pParam = pParam;}
private:
static CParameter* m_pParam;
}

//CParameter.cpp
CParameter::CParameter()
{
CXXX::SetParam(this);
}

CParameterクラスのポインタをCXXXクラスにstaticなメンバ変数として持たせたいと
思いました。実行すると、

CXXX.obj : error LNK2001: 外部シンボル "private: static class CParameter *
CXXX::m_pParam (?m_pParam@CXXX@@0PAVCParameter@@A) は未解決です

とエラーになってしまいます。書籍を参考にやってみたのですが、何か間違っている
でしょうか。

それと、このようにstaticなデータに、初期化ではなく他のクラスから値を入れる場合、
コンストラクタなどで行うものでしょうか。

お忙しいかもしれませんが、どなたか、よろしくお願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

以下を追加。

// CXXX.cpp
CParameter* CXXX::m_pParam = 0;


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> それと、このようにstaticなデータに、初期化ではなく他のクラスから値を入れる場
合、
> コンストラクタなどで行うものでしょうか。

コンストラクタだけではありません。どのメソッドからも設定できます。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

επιστημηさん、お返事、ありがとうございました。
CXXX.cppの中に、

CParameter* CXXX::m_pParam = 0;

と書かなければいけなかったのですね。staticなメンバ変数を初期化するときのみ、このよう
に書くのかと思っていました。確かに書籍にも、
「コンパイル時点でどこかしらに領域が確保されていけない」
とありました。
 よく見ると、επιστημηさんの最初の書き込みは、私のから、やく1分足らず・・・。ありが
とうございました!


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

CParameter* CXXX::m_pParam = 0;

> と書かなければいけなかったのですね。staticなメンバ変数を初期化するときのみ、
> このように書くのかと思っていました。

初期化せずとも領域は必要です。
CParameter* CXXX::m_pParam;
のように。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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