与"LPCWSTR"型参数不兼容

Incompatible with parameter of type "LPCWSTR"

本文关键字:不兼容 参数 LPCWSTR      更新时间:2023-10-16
#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;
}

所以我有一个程序,我需要用动态char cat显示目录中的所有文件,但它可以在Borland c++中编译,但在Visual Studio 15 + Resharper中它不起作用。严重性代码描述项目文件行"char *"类型的参数与"LPCWSTR"类型的参数不兼容

要在Visual c++中编译代码,您需要使用多字节字符WinAPI函数而不是宽字符函数。

Set Project ->属性→高级(或。一般用于旧版本)->使用多字节字符集

的字符集选项

也见截图

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

我用(LPCWSTR)来强制转换所有常量字符串。解是这样的
早些时候

MessageBox(NULL,"Dialog creation failed! Aborting..", "Error", MB_OK);

转换到LPCWSTR后

MessageBox(NULL, (LPCWSTR) "Dialog creation failed! Aborting..", (LPCWSTR) "Error", MB_OK);

所以只要复制(LPCWSTR)并粘贴到这个错误产生的地方就解决了我所有的错误

另一种解决这个问题的方法是在字符串前面使用L宏。

MessageBox(NULL, L"Dialog creation failed! Aborting..", L"Error", MB_OK);

参见:'L'在前面的字符串意味着在c++ ?

c++中字符串的L前缀

您可以使用 wchar_t

class Dir
{
public:
    wchar_t* cat;
Dir()
{
    wcout << "(C:/*)n";
    cat = new wchar_t[50];
    wcin >> cat;
}
    void virtual ShowFiles()
    {
    }
};

Visual Studio 2013及以后的中,用于多字节字符编码的MFC库(MBCS)将作为Visual Studio

的附加组件提供。

任何设置都可以:

#include <tchar.h>
MessageBox(NULL, _T("Dialog creation failed! Aborting.."), _T("Error"), MB_OK);
相关文章: