theAppとグローバル変数の使用法で – プログラミング – Home

theAppとグローバル変数の使用法で
 
通知
すべてクリア

[解決済] theAppとグローバル変数の使用法で


ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
Topic starter  

こんにちは。
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
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>theAppってグローバル変数ではないのですか?

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

>CControlApp *pApp = (CControlApp *)AfxGetApp;

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

では?


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
Topic starter  

早速の回答ありがとうございます。

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

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


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

theApp が宣言されているのとは別のファイルで使おうとしているのだと思います。
グローバルであっても、外部参照として扱われます。

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

extern CControlApp theApp;

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


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

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

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

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


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
Topic starter  

みなさんありがとうございます。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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