VC++ MFC エラーコード C2248 private メンバ (クラス 'CObject'で…
VC++ MFC エラーコード C2248
現在、ダイアログAにあるコンボボックス(IDC_COMBO1)に単語を登録、削除する処理をしています。
ダイアログAには他に[登録]ボタン(IDC_BUTTON1)と[削除]ボタン(IDC_BUTTON2)があります。
IDC_COMBO1 を CComboBox m_combo;
として
// [登録]ボタン押下時
void CADlg::OnBnClickedButton1()
{
CString Txt, old;
int ret = 0, count = 0, i;
m_combo.GetWindowText(Txt);
if ( strcmp(Txt, "") == 0 ) {
AfxMessageBox( _T("語句を入力してください"));
return;
}
// コンボボックスのリスト数取得
count = m_combo.GetCount();
for(i = 0; i < count; i++){
// IDC_COMBO1に登録済みの語句を順番に調べていく
m_combo.GetLBText(i, old);
// 既に登録済みの名前があった場合
if (oldFile == Txt){
ret = MessageBox( _T("上書きしますか?"), _T("語句登録"), MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 );
}
}
if ( ret == IDYES ) {
return;
} else if ( ret == IDNO ) {
// 後ほど説明します
CBDlg dlg;
dlg.DoModal();
m_combo1.AddString(NewName); // extern CString NewName;←グローバル変数(Bダイアログから)
return;
}
// 登録されていない語句の場合
m_combo.AddString(Txt);
}
上記の登録の方、エラーなくコンパイルがとおり、コンボボックスにもちゃんと格納されています。
削除の方もエラーなくちゃんとコンボボックスから削除されます。
次に
>else if ( ret == IDNO )
の部分なのですが
[いいえ]ボタン(IDNO)が押された場合にはダイアログBが表示されます。
ダイアログBには語句を入力するエディットボックスIDC_EDIT1、[登録]ボタン(IDC_TOUROKU)、[取り消し]ボタン(IDC_TORIKESI)があります。
IDC_EDIT1 を CEdit m_ed1;
として
ここのBダイアログでもAダイアログ中のコンボボックスに格納されている語句が入力された場合はメッセージボックスを表示したいのです。
そこで
void CBDlg::OnBnClickedTouroku()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
int rup, cnt, ret;
CString oldf;
CADlg cad;
CComboBox cfdn = cad.m_combo;
m_ed1.GetWindowText(NewName); // CString NewName;←グローバル変数
// Aダイアログ中のコンボボックスリスト数の取得
cnt = cfdn.GetCount();
for(rup = 0; rup < cnt; rup++){
// Aダイアログのコンボボックス中に登録されている語句取得
cfdn.GetLBText(rup, oldf);
if (oldf == NewName){
ret = MessageBox( _T("本当に上書きしてもいいですか?"), _T("環境設定"), MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 );
}
}
if(ret == IDOK){
OnOK();
}
else{
return;
}
}
としました。
ここでコンパイルすると
1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1820) : error C2248: 'CObject::CObject' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。
1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(558) : 'CObject::CObject' の宣言を確認してください。
1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : 'CObject' の宣言を確認してください。
1> コンパイラでのこの診断により関数 'CCmdTarget::CCmdTarget(const CCmdTarget &)' が生成されました。
のようにエラーがでます。
調べてみると
CComboBox cfdn = cad.m_combo;
が原因のようです。
ググってみたりしたのですが解消法がわからず質問させていただきました。
よろしくお願いします。
お礼
ありがとう御座います。 ずっと悩んでいたのでとても助かりました。