モードレスダイアログの静的生成 – プログラミング – Home

モードレスダイアログの静的生成
 
通知
すべてクリア

[解決済] モードレスダイアログの静的生成


MK
 MK
(@MK)
ゲスト
結合: 25年前
投稿: 66
Topic starter  

ダイアログベースのアプリにて

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

Dlg1.h において CDlg2 m_dlg; が宣言された時点で
Dlg2.h が #include されていないために CDlg2 の
詳細が明らかでないから。


返信引用
MK
 MK
(@MK)
ゲスト
結合: 25年前
投稿: 66
Topic starter  

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

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

--- Dlg1.h ---

#include Dlg2.h

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

あるいは:

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

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


返信引用
MK
 MK
(@MK)
ゲスト
結合: 25年前
投稿: 66
Topic starter  

回答ありがとうございます。
#include Dlg2.h追加で出来ました。

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

ポインタの宣言には、その詳細を必要としないからです。


返信引用
MK
 MK
(@MK)
ゲスト
結合: 25年前
投稿: 66
Topic starter  

分かりました。
本当にありがとう御座いました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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