gpt4 book ai didi

c++ - CFileDialog 实例化的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:34 26 4
gpt4 key购买 nike

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

我的代码:

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

产生的错误:

1 IntelliSense: no instance of constructor "CFileDialog::CFileDialog" matches the argument list argument types are: (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);

有什么问题?

最佳答案

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

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

在 Visual Studio 中创建项目时,使用的默认字符集类型是 Unicode,不是 MBCS,也不是“未设置”。这意味着采用字符数组和指针的 Windows API 和 MFC 函数将使用宽字符。因此,在需要宽字符串的 Windows API 函数上使用 charchar *const char* 将无法编译。

即使您对 Unicode 或 MBCS 一无所知,您的代码也有错误的迹象是,您调用的函数采用 LPCTSTR 类型——也就是说,不是 一个 const char * ,它就是它的本质,即一个指向 TCHAR 的常量指针。如果您坚持知道要使用指定的类型,那么您就可以开始了。

所以教训是,如果一个函数想要一个类型,提供一个该类型的变量或表达式,而不是你认为该类型等同的东西。

关于c++ - CFileDialog 实例化的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com