theAppとグローバル変数の使用法で

[戻る]
ナオーバ 2002/06/18(火) 12:01:11
こんにちは。
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
と表示されます。

何で変な数字になるの?初期化がうまくいっていないのでしょうか?
よろしくお願いします

Bun 2002/06/18(火) 12:24:25
>theAppってグローバル変数ではないのですか?

グローバルだと思いますよ。

>CControlApp *pApp = (CControlApp *)AfxGetApp;

CControlApp *pApp = (CControlApp *)AfxGetApp();

では?

ナオーバ 2002/06/18(火) 12:48:47
早速の回答ありがとうございます。

CControlApp *pApp = (CControlApp *)AfxGetApp();
でした。馬鹿みたいなことで悩んでいました。

>>theAppってグローバル変数ではないのですか?
>グローバルだと思いますよ。
では何故 定義されていない識別子です。 となるのかがわかりません。
よろしくお願いします。

TAD [E-Mail] 2002/06/18(火) 13:03:47
theApp が宣言されているのとは別のファイルで使おうとしているのだと思います。
グローバルであっても、外部参照として扱われます。

theApp を使いたいファイル内で、

extern CControlApp theApp;

と入れると、使えるようになります。
これは、グローバル変数のように、関数の外で宣言しても、
特定の関数内に入れることもできます。

dairygoods 2002/06/18(火) 13:10:47
グローバル変数にアクセスするには、その変数を使用する前に
extern CControlApp theApp; // theAppというCControlApp型のグローバル変数があるよ
と宣言しなければなりません。

どこからでも無分別にアクセスしてもよいのなら、
control.h ファイルに上記宣言を追加すればよいでしょう。

ヘルプでexternを調べてみてください。

ナオーバ 2002/06/19(水) 01:01:37
[[解決]]
みなさんありがとうございます。

グローバル変数と外部参照とごっちゃになっていました。

ありがとうございました。

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