こんにちは。
VC6 MFCでやっていまして、
グローバルにアクセスしたいので、C*Appにpublicのメンバを作成して、
theAppを使おうとしたら、
定義されていない識別子です。
とコンパイラーに叱られます。
C*App *pApp = (C****App *)AfxGetApp;
と使用側に記述して pApp を使うとアクセスできるのですが、
theAppってグローバル変数ではないのですか?
それと、C*Appにpublicのメンバに int m_nTest; を定義して
C*View::OnDrawに
CControlApp *pApp = (CControlApp *)AfxGetApp;
TRACE(pApp->m_nTest = %08d\n, pApp->m_nTest);
を記述しました。
C****Appのコンストラクタ、InitInstance()どっちかに m_nTest = 100;
と記述して実行すると、どっちでやっても
アウトプットウィンドウに
pApp->m_nTest = 04341020
と表示されます。
何で変な数字になるの?初期化がうまくいっていないのでしょうか?
よろしくお願いします
>theAppってグローバル変数ではないのですか?
グローバルだと思いますよ。
>CControlApp *pApp = (CControlApp *)AfxGetApp;
CControlApp *pApp = (CControlApp *)AfxGetApp();
では?
早速の回答ありがとうございます。
CControlApp *pApp = (CControlApp *)AfxGetApp();
でした。馬鹿みたいなことで悩んでいました。
>>theAppってグローバル変数ではないのですか?
>グローバルだと思いますよ。
では何故 定義されていない識別子です。 となるのかがわかりません。
よろしくお願いします。
theApp が宣言されているのとは別のファイルで使おうとしているのだと思います。
グローバルであっても、外部参照として扱われます。
theApp を使いたいファイル内で、
extern CControlApp theApp;
と入れると、使えるようになります。
これは、グローバル変数のように、関数の外で宣言しても、
特定の関数内に入れることもできます。
グローバル変数にアクセスするには、その変数を使用する前に
extern CControlApp theApp; // theAppというCControlApp型のグローバル変数があるよ
と宣言しなければなりません。
どこからでも無分別にアクセスしてもよいのなら、
control.h ファイルに上記宣言を追加すればよいでしょう。
ヘルプでexternを調べてみてください。
みなさんありがとうございます。
グローバル変数と外部参照とごっちゃになっていました。
ありがとうございました。