4

の定義に従っていますがCFileDialog、VS2013 は、渡した引数に使用できるコンストラクターがないことをまだ伝えています。

私のコード:

CFile theFile;
char strFilter[] = { "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||" };
CFileDialog fDlg = CFileDialog(TRUE, ".txt", NULL, 0, strFilter);

結果のエラー:

1 IntelliSense: コンストラクター "CFileDialog::CFileDialog" のインスタンスが引数リストと一致しません。 2013\Projects\SDI\SDI\MainFrm.cpp 131 21 SDI

参照用のCFileDialogコンストラクター:

explicit CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
    LPCTSTR lpszDefExt = NULL,
    LPCTSTR lpszFileName = NULL,
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    LPCTSTR lpszFilter = NULL,
    CWnd* pParentWnd = NULL,
    DWORD dwSize = 0,
    BOOL bVistaStyle = TRUE);

どうしたの?

4

2 に答える 2

5

問題は、間違った文字列型を使用しているようです。

迅速な解決策は、 ではTCHARなくを使用することcharです。より良い解決策は、ワイド文字列を使用し、ビルドが Unicode であることを確認することです。

Visual Studio でプロジェクトを作成する場合、使用される既定の文字セットの種類は Unicode であり、MBCS ではなく、"設定なし" ではありません。これは、文字配列とポインターを受け取る Windows API と MFC 関数がワイド文字を使用することを意味します。したがって、ワイド文字列を予期する Windows API 関数で , , を使用するcharchar *const char*コンパイルされません。

Unicode や MBCS について何も知らなかったとしても、あなたのコードが間違っているということは、あなたが呼び出している関数が の型を取るLPCTSTRということです。指定された型を使用することを知っていれば、問題はありませんでした。 const char *TCHAR

したがって、関数が型を必要とする場合は、その型が同等であると考えるものではなく、その型の変数または式を提供するという教訓があります。

于 2014-11-20T21:10:26.273 に答える