ダイアログベースのアプリにて
ダイアログ1のボタンの押し下げでモードレスダイアログ2を開くときに、
モードレスダイアログ2のオブジェクトの宣言をダイアログ1のヘッダーファイルに
書いたのですがエラーが出ます。
error C2079: 'm_dlg' が 未定義の class 'CDlg2' で使用されています。
何が悪いのでしょうか?
// Dlg1.h : ヘッダー ファイル
class CDlg2;
class CDlg1 : public CDialog
{
public:
CDlg2 m_dlg;
略
// Dlg1.cpp
略
#include Dlg2.h
略
//CDlg2 m_dlg;←ここなら問題無い
void CDlg1::OnButton1()
{
m_dlg.Create(IDD_DIALOG2);
m_dlg.ShowWindow(SW_SHOW);
}
環境 WIN98 VC++6.0 MFC
Dlg1.h において CDlg2 m_dlg; が宣言された時点で
Dlg2.h が #include されていないために CDlg2 の
詳細が明らかでないから。
回答ありがとうございます。
いつもグローバル変数は使うなと言われているので、そうしたいのですが
CDlg2 m_dlg;をどこに宣言するのが正しい作法なのでしょうか?
よろしくお願いいたします。
--- Dlg1.h ---
#include Dlg2.h
class CDlg1 : public CDialog {
...
CDlg2 m_dlg;
};
あるいは:
--- Dlg1.h ---
class CDlg2;
class CDlg1 : public CDialog {
...
CDlg2* m_dlg;
};
回答ありがとうございます。
#include Dlg2.h追加で出来ました。
今まで知らなかったけど、クラスウィザードを使うと自動で#include Dlg2.hが追加されて
いたのですね。
今回は自分で書いたのでまったく気づきませんでした。
あと、CDlg2* m_dlg;の場合はどうして#include Dlg2.hがいらないのでしょうか?
ポインタの宣言には、その詳細を必要としないからです。
分かりました。
本当にありがとう御座いました。