引数有りのコンストラクタの呼び出し方 – プログラミング – Home

引数有りのコンストラクタの呼び出し方
 
通知
すべてクリア

[解決済] 引数有りのコンストラクタの呼び出し方


ぽっぷ
 ぽっぷ
(@ぽっぷ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

VC6.0SP3/MFCです。

ダイアログA(以下A)を作りました。親ダイアログからボタンを押すことにより、
Aを表示しようとしています。Aは複数の構造体を受け取ってそのデータを表示
させたいので、コンストラクタでデータポインタを受けることにしました。

◎ボタンを押下した際の関数
void CMainDlg::OnBtnShowDlg()
{
A_DATA tAData; // 構造体
B_DATA tBData; // 構造体
int b = 1; // データ種別(1:AData, 2:BData)

CShowDisp *pDlg = new CShowDisp((LPVOID)&tAData, b);
pDlg->DoModal();
delete pDlg;
}

◎Aのコンストラクタ部分
CShowDisp::CShowDisp(CWnd* pParent /*=NULL*/)
: CDialog(CShowDisp::IDD, pParent)
{ // 標準のコンストラクタ(中略)}

CShowDisp::CShowDisp(LPVOID lpData, int nDataNo)
{ // 自作コンストラクタ
// 引数をメンバ変数にコピー
m_nShowDataNo = nDataNo; // データ番号
m_pShowDispData = lpData;// データポインタ
}

しかし、これを実行させると、DoModal()で異常終了します。
(dlgcore.cppのDoModal()に入った最初のASSERTでエラーです。)
知識としては、「コンストラクタは最初に呼ばれる部分」
「引数付きの独自のコンストラクタも作れる(オーバーロード?)」と
言うことぐらいしかわかりません。何がいけないのでしょうか?

単純に「CShowDisp *pDlg = new CShowDisp();」と宣言して
DoModal()を呼び出した場合難なく表示出来るのですが・・・。
初心者で申し訳ありませんがどなたか説明して頂けますか?
宜しくお願いします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

標準のコンストラクタは、CDialog(CShowDisp::IDD, pParent) として、
基底クラスのコンストラクタを呼び出していますが、
上記の自作コンストラクタは何も呼び出していません。

そのため、基底クラスは正しい初期化を行えず、途中でエラーになります。


返信引用
ぽっぷ
 ぽっぷ
(@ぽっぷ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

お返事有難うございます。と、言うことは・・・

CShowDisp::CShowDisp(CWnd* pParent, LPVOID lpData, int nDataNo)
: CDialog(CShowDisp::IDD, pParent)
{
(略)
}

と、すれば良いのでしょうか・・・。早速やってみます。


返信引用
ぽっぷ
 ぽっぷ
(@ぽっぷ)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

↑の記述で出来ました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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