首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFileDialog实例化问题

CFileDialog实例化问题
EN

Stack Overflow用户
提问于 2014-11-20 21:00:18
回答 2查看 2K关注 0票数 4

我正在遵循CFileDialog的定义,但是VS2013仍然告诉我,我传递的参数没有可用的构造函数。

我的守则:

代码语言:javascript
复制
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构造函数:

代码语言:javascript
复制
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);

有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-20 21:10:26

问题似乎是您使用的字符串类型不正确。

快速解决方案是使用TCHAR而不是char。更好的解决方案是只使用宽字符串,并确保构建是Unicode。

在Visual中创建项目时,使用的默认字符集类型是Unicode,而不是MBCS,也不是"Not“。这意味着使用字符数组和指针的Windows和MFC函数将使用宽字符。因此,在Windows函数上使用charchar *const char*将不会编译宽字符串。

说明您的代码是错误的,即使您对Unicode或MBCS一无所知,您正在调用的函数采用的是LPCTSTR类型--这不是const char *,而是它本身,即指向TCHAR的常量指针。如果您坚持知道使用指定的类型,那么最好选择。

因此,我们的经验是,如果一个函数想要一个类型,提供一个变量或表达式的类型,而不是你认为的类型是等价的。

票数 5
EN

Stack Overflow用户

发布于 2014-11-20 21:14:37

好的。因此,我将代码更改为:

代码语言:javascript
复制
CFile theFile;
TCHAR strFilter[] = { _T("TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||") };
CFileDialog fDlg = CFileDialog(TRUE, _T(".txt"), NULL, 0, strFilter);

而且,现在没有问题了。谢谢你的回应!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27049481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档