与"LPCWSTR"类型的参数不兼容

Bog*_*nko 10 c++ visual-c++

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <dos.h>
using namespace std;

class Dir
{
public:
    char* cat;
    Dir()
    {
        cout << "(C:/*)\n";
        cat = new char[50];
        cin >> cat;
    }

    void virtual ShowFiles()
    {
    }

};


class Inside : public Dir
{
public:
    void virtual ShowFiles()
    {
        HANDLE hSearch;
        WIN32_FIND_DATA pFileData;

        hSearch = FindFirstFile(cat, &pFileData);
        if (hSearch != INVALID_HANDLE_VALUE)
            do
            {
                //  if ((pFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                cout << pFileData.cFileName << "\n";
            } while (FindNextFile(hSearch, &pFileData));
            FindClose(hSearch);
    }
};
int main()
{
    Dir *obj1[2];
    obj1[1] = new Inside;
    obj1[1]->ShowFiles();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我有一个程序,我需要用动态char cat显示目录中的所有文件,但它可以在Borland C++中编译,但在Visual Studio 15 + Resharper中它不起作用.严重级代码说明项目文件行"char*"类型的错误(活动)参数与"LPCWSTR"类型的参数不兼容

Ant*_*hev 44

要在Visual C++中编译代码,您需要使用Multi-Byte char WinAPI函数而不是Wide char函数.

项目 - >属性 - >常规 - >字符集选项设置使用多字节字符集

  • 在 Visual Studio 2019 中,现在映射到:项目 -&gt; 属性 -&gt; 高级 -&gt; 字符 -&gt; 使用多字节字符集 (6认同)
  • 或者,停止使用基于`TCHAR`的API并使用基于`char`的API(`FindFirstFileA()`和`WIN32_FIND_DATAA`).或者在任何地方停止使用`char`并使用`wchar_t`,然后使用基于`wchar_t`的API(`std :: wcin`,`FindFirstFileW()`和`WIN32_FIND_DATAW`). (4认同)

M S*_*afa 7

我实际上找到了解决此错误的另一种方法,因为上面的方法对我不起作用.

我把所有常量字符串都用了(LPCWSTR).解决方案看起来像这样
早些时候

MessageBox(NULL,"Dialog creation failed! Aborting..", "Error", MB_OK);
Run Code Online (Sandbox Code Playgroud)

投射到LPCWSTR后

MessageBox(NULL, (LPCWSTR) "Dialog creation failed! Aborting..", (LPCWSTR) "Error", MB_OK);
Run Code Online (Sandbox Code Playgroud)

因此,只要(LPCWSTR)在生成此错误的地方复制和粘贴,就可以解决我的所有错误.


Ste*_*fan 7

另一种解决此问题的方法是L在字符串前面使用文字.

MessageBox(NULL, L"Dialog creation failed! Aborting..", L"Error", MB_OK);
Run Code Online (Sandbox Code Playgroud)

请参阅:字符串前面的'L'在C++中的含义是什么?

要么

C++中字符串的L前缀