dポイントプレゼントキャンペーン実施中!

MFCダイアログベースアプリを作成しています。
開発環境はVC++2005です。

CtestDlgクラスのOnBnClickedOk()関数内での処理、
CtestDlg2 dlg( &hoge );
にてCtestDlg2ダイアログ起動し、CString型変数hogeを、
CtestDlg2クラスのコンストラクタに引数として渡したいのですが、
コンパイルエラーが出てしまい、何が原因か分かりません。
解決法をご存知の方おられましたら、お手数ですがご教授お願い致します。

【エラー内容】
error C2664: 'CtestDlg2 ::CtestDlg2(const CtestDlg2 &)' :
1 番目の引数を 'CString *__w64 ' から 'const CtestDlg2 &' に
変換できません。(新しい機能 ; ヘルプを参照)
理由: 'CString *__w64 ' から 'const CtestDlg2' へは
変換できません。
コンストラクタはソース型を持てません、またはコンストラクタの
オーバーロードの解決があいまいです。

【CtestDlgクラス内宣言】
void CtestDlg::OnBnClickedOk(){
CString hoge = "aaa";
CtestDlg2 dlg( &hoge );
dlg.DoModal();
}

【CtestDlg2クラスコンストラクタ】
//CtestDlg2::CtestDlg2(CWnd* pParent /*=NULL*/)
CtestDlg2::CtestDlg2(CString* st, CWnd* pParent /*=NULL*/)
: CDialog(CtestDlg2::IDD, pParent), m_st(st)
{
}

【CtestDlg2クラスヘッダ内宣言】
public:
CtestDlg2::CtestDlg2(CString* st, CWnd* pParent /*=NULL*/);
CString* m_st;

A 回答 (2件)

 こんにちは。



 この場合ですと、

 CtestDlg2 dlg( &hoge );

 ではなくて

 CtestDlg2 dlg( &hoge, NULL );

 ではないでしょうか。

 CtestDlg2 dlg( &hoge );

 と書きたい場合は、

【CtestDlg2クラスヘッダ内宣言】
public:
×CtestDlg2::CtestDlg2(CString* st, CWnd* pParent /*=NULL*/);
○CtestDlg2::CtestDlg2(CString* st, CWnd* pParent = NULL);

 として、デフォルト引数を有効にして見て下さい。

この回答への補足

CtestDlg2 dlg( &hoge, NULL );
と宣言することでコンパイルを通すことが出来ました!
引数が足りなかったのですね。ありがとうございました!

しかし、最初はマルチバイト文字コードにて試したところ、
general error c101008a: Failed to save the updated manifest to the file ".\Debug\test.exe.embed.manifest". Qia|?L UcfD~Y
というエラーが出て、Unicodeに設定すると通りました。
なぜ文字コードの違いによって結果が異なるのでしょうか?
掲題の問題については解決したのですが、疑問なので、
もしお手数でなければご回答頂けませんでしょうか?

補足日時:2009/01/23 18:26
    • good
    • 0

どこかで CtestDlg2のオブジェクトの代入などしていませんか?



コピーコンストラクタが定義されていないためのエラー(警告)のように思えますが ・・・

単に CString*を追加したコンストラクタに変更しただけではご質問のようなエラーは確認出来ませんが ・・・
    • good
    • 0
この回答へのお礼

コピーコンストラクタが呼ばれるような実装はしてないはずなんですが。。。
しかし、コピーコンストラクタに関して知識が甘いので、
見落としがあるのかもしれません。
再度ソースを見直してみます。
ご指摘ありがとうございました。

お礼日時:2009/01/26 16:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!