モードレスダイアログの静的生成

[戻る]
MK 2004/04/03(土) 21:20:22
ダイアログベースのアプリにて

ダイアログ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

επιστημη [E-Mail] [HomePage] 2004/04/03(土) 22:48:31
Dlg1.h において CDlg2 m_dlg; が宣言された時点で
Dlg2.h が #include されていないために CDlg2 の
詳細が明らかでないから。

MK 2004/04/03(土) 22:56:06
回答ありがとうございます。

いつもグローバル変数は使うなと言われているので、そうしたいのですが
CDlg2 m_dlg;をどこに宣言するのが正しい作法なのでしょうか?

よろしくお願いいたします。

επιστημη [E-Mail] [HomePage] 2004/04/03(土) 23:28:14
--- Dlg1.h ---

#include "Dlg2.h"

class CDlg1 : public CDialog {
  ...
  CDlg2 m_dlg;
};

あるいは:

--- Dlg1.h ---
class CDlg2;

class CDlg1 : public CDialog {
  ...
  CDlg2* m_dlg;
};

MK 2004/04/03(土) 23:47:36
回答ありがとうございます。
#include "Dlg2.h"追加で出来ました。

今まで知らなかったけど、クラスウィザードを使うと自動で#include "Dlg2.h"が追加されて
いたのですね。
今回は自分で書いたのでまったく気づきませんでした。


あと、CDlg2* m_dlg;の場合はどうして#include "Dlg2.h"がいらないのでしょうか?

επιστημη [E-Mail] [HomePage] 2004/04/04(日) 01:16:25
ポインタの宣言には、その詳細を必要としないからです。

MK 2004/04/04(日) 06:02:58
[[解決]]
分かりました。
本当にありがとう御座いました。

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