标准C ++不能在Qt Creator中编译

时间:2017-03-02 17:40:00

标签: c++ string qt

我目前正在Qt Creator中使用MingW32 G ++编译器。

我已经将CodeBlocks中的工作代码移植到Qt中,所以我可以使用Qt的网络功能,但是当我移植代码时,它无法编译错误:

C:\software\Qt\AutoUpload\main.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 }

其他问题,例如找到的问题herehere表明这是Windows API与LPCWSTR类型一起使用的Unicode编码的一些问题,但此答案要么不完整,要么不正确。 CodeBlocks和Qt Creator的编码设置是UTF-8,而不是Unicode或任何其他编码方法。

如果这是一个Unicode问题,这个代码已经在Visual Studio或CodeBlocks中编译,但它是无关紧要的。在Qt。

中, ONLY 环境无法完全编译

Qt Creator在做什么突然使这段代码失效?

1 个答案:

答案 0 :(得分:3)

在Windows API中使用字符串的所有函数实际上都是

如果您查看this FindFirstFile reference的底部,您会看到有两个功能,FindFirstFileWFindFirstFileA。使用哪一个取决于UNICODE宏,如果未定义ANSI函数(FindFirstFileA),则使用宽字符版本(FindFirstFileW )被使用。

如果定义了UNICODE,则需要使用例如std::wstring的宽字符版本。字符串类,BigQueryIO.Write