Несовместим с параметром типа "LPCWSTR"

#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"

5 ответов


для компиляции кода в Visual C++ вам нужно использовать многобайтовые функции Char WinAPI вместо широких функций char.

Set Проект - > Свойства - > Общие - > Набор Символов до Использовать Многобайтовый Набор Символов


Я действительно нашел другой способ решить эту ошибку, так как выше метод не работал для меня.

Я бросил все мои постоянные символьные строки с (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++?

или

L префикс для строк в C++


можно использовать тип 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);