////////////////////////////////////////////////////////////////////////////////
開発環境 : 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なデータに、初期化ではなく他のクラスから値を入れる場合、
コンストラクタなどで行うものでしょうか。
お忙しいかもしれませんが、どなたか、よろしくお願いします。
以下を追加。
// CXXX.cpp
CParameter* CXXX::m_pParam = 0;
> それと、このようにstaticなデータに、初期化ではなく他のクラスから値を入れる場
合、
> コンストラクタなどで行うものでしょうか。
コンストラクタだけではありません。どのメソッドからも設定できます。
επιστημηさん、お返事、ありがとうございました。
CXXX.cppの中に、
CParameter* CXXX::m_pParam = 0;
と書かなければいけなかったのですね。staticなメンバ変数を初期化するときのみ、このよう
に書くのかと思っていました。確かに書籍にも、
「コンパイル時点でどこかしらに領域が確保されていけない」
とありました。
よく見ると、επιστημηさんの最初の書き込みは、私のから、やく1分足らず・・・。ありが
とうございました!
CParameter* CXXX::m_pParam = 0;
> と書かなければいけなかったのですね。staticなメンバ変数を初期化するときのみ、
> このように書くのかと思っていました。
初期化せずとも領域は必要です。
CParameter* CXXX::m_pParam;
のように。