与“LPCWSTR”类型的参数不兼容

时间:2015-10-07 19:54:57

标签: 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;
}

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

5 个答案:

答案 0 :(得分:38)

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

设置项目 - &gt;属性 - &gt;一般 - &gt; 使用多字节字符集

的字符集选项

答案 1 :(得分:7)

此问题的另一种方法是在字符串前面使用L字面值。

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

请参阅:What does the 'L' in front a string mean in C++?

L prefix for strings in C++

答案 2 :(得分:6)

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

我用(LPCWSTR)生成了所有常量字符串。解决方案看起来像这样 的早些时候

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

转换为LPCWSTR后

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

因此,只需复制(LPCWSTR)并粘贴生成此错误的位置即可解决我的所有错误。

答案 3 :(得分:3)

您可以使用 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的附加组件提供

答案 4 :(得分:1)

它适用于任何设置:

#include <tchar.h>

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