标准C++无法在Qt Creator中编译

Standard C++ doesn't compile in Qt Creator

本文关键字:Creator 编译 Qt C++ 标准      更新时间:2023-10-16

目前我正在使用qt创建者中的mingw32 g 编译器。

我已经通过进行了移植从codeBlocks到QT的代码,因此我可以使用QT的网络功能,但是当我通过代码端口时,它无法与以下错误进行编译:

C:softwareQtAutoUploadmain.cpp:90: error: cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'LPCWSTR {aka const wchar_t*}' for argument '1' to 'void* FindFirstFileW(LPCWSTR, LPWIN32_FIND_DATAW)'
 HANDLE handle = FindFirstFile(dir, &search_data);

给出此错误的代码片段是第8行:

1 vector<string> getFilesInDir(string directory)
2 {
3     vector<string> filenames;
4     string dir = string(directory + "\*");
5 
6     WIN32_FIND_DATA search_data;
7     memset(&search_data, 0, sizeof(WIN32_FIND_DATA));
8     HANDLE handle = FindFirstFile(dir.c_str(), &search_data);
9     while (handle != INVALID_HANDLE_VALUE)
10    {
11        if (FindNextFile(handle, &search_data) == FALSE) break;
12        if (search_data.cFileName == string(".") || search_data.cFileName == string(".."))
13        {
14            cout << "Ignoring..." << endl;
15            continue;
16        }
17        filenames.push_back(search_data.cFileName);
18        cout << search_data.cFileName << endl;
19    }
20
21    FindClose(handle);
22    return filenames;
23 }

在此处和此处发现的其他问题,表明这是Windows API与LPCWSTR类型一起使用的Unicode编码的问题,但是此答案要么不完整或不正确。我使用CodeBlocks和QT创建者的编码设置是UTF-8,而不是Unicode或任何其他编码方法。

如果这是一个Unicode问题,则此代码将不是在Visual Studio或CodeBlocks中编译的,但无论如何。唯一

QT创建者在做什么突然使此代码非功能?

Windows API中的所有功能实际上都是

如果您查看此FindFirstFile参考的底部,您会发现有两个功能FindFirstFileWFindFirstFileA。使用哪一个取决于UNICODE宏,如果未定义ANSI函数(FindFirstFileA),则使用 wide warge 版本版本(FindFirstFileW)。

>

如果定义了 UNICODE,则需要使用诸如字符串类,是std::wstring