#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”类型的参数不兼容
答案 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++?
或
答案 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);