Jay*_*ayB 4 c++ mfc cfiledialog
我正在遵循这个定义CFileDialog,但VS2013仍然告诉我没有构造函数可用于我传入的参数.
我的代码:
CFile theFile;
char strFilter[] = { "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||" };
CFileDialog fDlg = CFileDialog(TRUE, ".txt", NULL, 0, strFilter);
Run Code Online (Sandbox Code Playgroud)
结果错误:
1 IntelliSense:没有构造函数实例"CFileDialog :: CFileDialog"匹配参数列表参数类型是:(int,const char [5],int,int,char [46])c:\ Users\Jonathan\Documents\Visual Studio 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);
Run Code Online (Sandbox Code Playgroud)
有什么问题?
问题似乎是您使用的字符串类型不正确.
快速解决方案是使用TCHAR而不是char.更好的解决方案是只使用宽字符串并确保构建是Unicode.
在Visual Studio中创建项目时,使用的默认字符集类型是Unicode,而不是MBCS,而不是"未设置".这意味着采用字符数组和指针的Windows API和MFC函数将使用宽字符.因此,使用char,char *,const char*,对期待宽字符串不会编译Windows API函数.
即使您对Unicode或MBCS一无所知,您的代码错误的指示是您正在调用的函数采用的类型LPCTSTR- 不是 a const char *,它就是它,即指向a的常量指针TCHAR.如果您不知道如何使用指定的类型,那么您将会很高兴.
因此,经验教训是,如果函数需要一个类型,请提供该类型的变量或表达式,而不是您认为该类型相当于的类型.