Visual C++2002のMFCのダイアログベースで作業をしているのですが、クラスの中に存在する変数の値を、別のファイルに書かれている外部関数で参照する方法が分かりません。
プロジェクト内のソースファイルとヘッダーファイルは次のような構成になっています。
ソースファイル
テスト.cpp
テストDlg.cpp
stdafx.cpp
test.cpp
ヘッダーファイル
テスト.h
テストDlg.h
stdafx.h
Resource.h
フォーム上にはボタンが2個置いてあります。
CMyDlgに変数の追加で、cntというint型の変数を追加します。
ShowFunc(void)という関数を追加して変数cntの値を返すようにします。
cpp
1int CMyDlg::ShowFunc(void) 2{ 3 return cnt; 4}
ボタン1を押したら次の関数が実行されます。
cpp
1void CMyDlg::OnBnClickedButton1() 2{ 3 int num = ShowFunc(); 4 char str[10]; 5 itoa(num, str, 10); 6 MessageBox(str, "cntの値", MB_OK); 7 cnt2 = num; // cnt2はグローバル変数でテストDlg.cppの上のほうで宣言されている 8}
ボタン2を押したら次の関数が実行されます。
cpp
1void CMyDlg::OnBnClickedButton2() 2{ 3 func(); 4}
func関数は自分で追加したtest.cppに記入してあります。
cpp
1#pragma once 2#include "stdafx.h" 3#include "テスト.h" 4#include "テストDlg.h" 5extern int cnt2; 6void func() 7{ 8 //int num = CMyDlg::ShowFunc(); 9 //int num = CMyDlg::cnt; 10 int num = cnt2; 11 12 char str[10]; 13 itoa(num, str, 10); 14 MessageBox(NULL, str, "func関数のcntの値", MB_OK); 15}
変数cntはBOOL CMyDlg::OnInitDialog()でフォームの初期化の段階で数値99を代入してあります。
ボタン1を押すと99と書かれたメッセージボックスが表示されます。
ボタン1を押した後ボタン2を押しても99と表示されます。それはボタン1を押したときにグローバル変数cnt2に代入作業を行っているからです。
僕が質問したいのは、このグローバル変数を使わないでtest.cppに書かれてあるfunc関数で、CMyDlgの変数cntを参照する方法を知りたいと思っています。
func関数内で次のように宣言してもエラーになります。
int num = CMyDlg::cnt;
test.cpp(13): error C2597: 静的でないメンバ 'CMyDlg::cnt' への参照が正しくありません。
とエラーが出ます。
グローバル変数に一回一回クラスの変数の値を代入してたら面倒です。グローバル変数を使わずに別のファイルからクラス内の変数を参照する方法をご存知の方は教えてください。あるいはクラスを丸ごと、グローバル変数に代入して、一回の代入で、別のファイルでもそのクラスを使う方法のようなものはないのでしょうか?(意味が分からなかったらすみません)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/21 01:49
2021/03/21 03:54