我正在遵循CFileDialog的定义,但是VS2013仍然告诉我,我传递的参数没有可用的构造函数。
我的守则:
CFile theFile;
char strFilter[] = { "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||" };
CFileDialog fDlg = CFileDialog(TRUE, ".txt", NULL, 0, strFilter);由此产生的错误:
1 IntelliSense:没有构造函数"CFileDialog::CFileDialog“与参数列表参数类型匹配的实例是:(int,const char 5,int,int,char 46) c:\Users\Jonathan\Documents\Visual 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);有什么问题吗?
发布于 2014-11-20 21:10:26
问题似乎是您使用的字符串类型不正确。
快速解决方案是使用TCHAR而不是char。更好的解决方案是只使用宽字符串,并确保构建是Unicode。
在Visual中创建项目时,使用的默认字符集类型是Unicode,而不是MBCS,也不是"Not“。这意味着使用字符数组和指针的Windows和MFC函数将使用宽字符。因此,在Windows函数上使用char、char *、const char*将不会编译宽字符串。
说明您的代码是错误的,即使您对Unicode或MBCS一无所知,您正在调用的函数采用的是LPCTSTR类型--这不是const char *,而是它本身,即指向TCHAR的常量指针。如果您坚持知道使用指定的类型,那么最好选择。
因此,我们的经验是,如果一个函数想要一个类型,提供一个变量或表达式的类型,而不是你认为的类型是等价的。
发布于 2014-11-20 21:14:37
好的。因此,我将代码更改为:
CFile theFile;
TCHAR strFilter[] = { _T("TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||") };
CFileDialog fDlg = CFileDialog(TRUE, _T(".txt"), NULL, 0, strFilter);而且,现在没有问题了。谢谢你的回应!
https://stackoverflow.com/questions/27049481
复制相似问题