web-dev-qa-db-fra.com

Incompatible avec le paramètre de type "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;
}

Donc, j'ai un programme, je dois montrer avec Dynamic Char Cat tous les fichiers dans le répertoire, mais il est compilable dans Borland C++, mais dans Visual Studio 15 + Resharper, cela ne fonctionne pas. Code de gravité Description Ligne de fichier projet L'argument (actif) de type "char *" est incompatible avec le paramètre de type "LPCWSTR"

8
Bogdan Tkachenko

Pour compiler votre code dans Visual C++, vous devez utiliser les fonctions WinAPI sur plusieurs caractères au lieu de caractères étendus.

Set Projet -> Propriétés -> Général -> Jeu de caractères option pour Utiliser le jeu de caractères multi-octets

35
Anton Malyshev

J'ai en fait trouvé un autre moyen de résoudre cette erreur car la méthode ci-dessus ne fonctionnait pas pour moi.

J'ai lancé toutes mes chaînes de caractères constantes avec (LPCWSTR). La solution ressemble à ceci
Plus tôt

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

Après le casting sur LPCWSTR

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

Il suffit donc de copier le (LPCWSTR) et de coller où cette erreur a été générée pour résoudre toutes mes erreurs.

6
M Shajeeh Mustafa

Une autre façon de résoudre ce problème consiste à utiliser la variable Lliteral devant votre chaîne.

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

Voir: Que signifie le "L" devant une chaîne en C++?

ou

L préfixe pour les chaînes en C++

6
Stefan

vous pouvez utiliser wchar_t

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

    void virtual ShowFiles()
    {
    }

};

Dans Visual Studio 2013 et versions ultérieures , les bibliothèques MFC pour l'encodage de caractères multi-niveaux (MBCS) seront fournies en tant que complément de Visual Studio.

3
Li Kui

Cela fonctionnera pour tous les paramètres:

#include <tchar.h>

MessageBox(NULL, _T("Dialog creation failed! Aborting.."), _T("Error"), MB_OK);
0
8Observer8