VS错误C++:不存在从 "WCHAR [260]" 转换到 "std::basic_string<char," 的适当构造函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS错误C++:不存在从 "WCHAR [260]" 转换到 "std::basic_string<char," 的适当构造函数相关的知识,希望对你有一定的参考价值。

代码如下,展开更方便看,vc6下可以正常运行,但vs报错,求大佬指点,谢谢
#include <iostream>
#include <string>
#include <map>

#include <windows.h>
#include <TlHelp32.h>

using namespace std;

bool traverseProcesses(std::map<std::string, int>& _nameID)

PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);

HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
std::cout << "CreateToolhelp32Snapshot Error!" << std::endl;;
return false;


BOOL bResult = Process32First(hProcessSnap, &pe32);

int num(0);

while (bResult)

std::string name = pe32.szExeFile;
int id = pe32.th32ProcessID;

std::cout << "[" << ++num << "] : " << "Process Name:"
<< name << " " << "ProcessID:" << id << std::endl;

_nameID.insert(std::pair<string, int>(name, id)); //字典存储
bResult = Process32Next(hProcessSnap, &pe32);


CloseHandle(hProcessSnap);

return true;


int main()

std::map<std::string, int> _nameID;

if (!traverseProcesses(_nameID))
cout << "Start Process Error!" << endl;


return 0;

参考技术A WCHAR去掉前面的W追问

您好,代码中没有w啊,可以具体到哪行代码吗

追答

你是刚学编程吧?我说的是改成CHAR
你的编译选项设置了unicode,改成多字节编码什么都不用改

我说的是_nameID变量的类型

看了下其他的代码,如果这样改的话,很多地方还要改

改为多字节编码,是最简单的

追问

哦哦,好的,谢谢您

本回答被提问者和网友采纳

c++中wchar转char

【中文标题】c++中wchar转char【英文标题】:wchar to char in c++ 【发布时间】:2010-05-24 13:07:57 【问题描述】:

我有一个 Windows CE 控制台应用程序,其入口点如下所示

int _tmain(int argc, _TCHAR* argv[])

我想检查argv[1] 的内容,将"-s" 转换为整数argv[2]。我无法缩小论点或访问它们进行测试。

我最初尝试了以下但收效甚微

if (argv[1] == L"-s")

我还尝试在每个字符上使用wostringstreamnarrow 函数,但这会使应用程序崩溃。

谁能解释一下? 谢谢

【问题讨论】:

【参考方案1】:

应该是:

if (_tcscmp(argv[1], _T("-s")) == 0)

【讨论】:

我认为wcscmp 是首选 我改成_tcscmp,最灵活。【参考方案2】:
if (argv[1] == L"-s")

当您比较指针时,即使对于窄字符串,这也是不正确的。你需要

if(wcscmp(argv[1],L"-s")==0)

if(std::wstring(argv[1])==L"-s")

【讨论】:

【参考方案3】:

argvchar* 的数组,而不是 string,因此通常与 == 的比较不起作用。该 if 语句正在比较两个指针。你能构造一个wstring然后比较吗?

if (wstring(argv[1]) == L"-s")

【讨论】:

【参考方案4】:

您可能需要将 argv[] 条目转换为字符串,然后进行比较。 [链接文字][1]

http://www.codeproject.com/Tips/81778/Converting-TCHAR-to-string-while-getting-PC-Name.aspx

[1]:

如果您可以转换为字符串,上述链接会有所帮助。

【讨论】:

以上是关于VS错误C++:不存在从 "WCHAR [260]" 转换到 "std::basic_string<char," 的适当构造函数的主要内容,如果未能解决你的问题,请参考以下文章

VS2010的MessageBox不存在从"CString"到"LPCSTR"的适当转换函数该怎么解决?

GLUT 问题:错误重新声明 C++ 内置类型“wchar_t”

c++中wchar转char

使用标准C++库,宽字符wchar如何转char递增输出?

C++中的WCHAR_T怎么转化成CHAR?

如何比较参数字符串 Visual C++