C++ c++;变量声明语法

C++ c++;变量声明语法,c++,C++,当我做一些像这样简单的事情时: char text1[] = "hello world"; MessageBox(NULL, text1, NULL, NULL); 我得到这个错误: Error 1 error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [12]' to 'LPCWSTR' char是单个字符,而不是字符串 你需要Unicode,你可以使用TCHAR TCHAR[] text = _

当我做一些像这样简单的事情时:

char text1[] = "hello world";
MessageBox(NULL, text1, NULL, NULL);
我得到这个错误:

Error   1   error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [12]' to 'LPCWSTR'   

char
是单个字符,而不是字符串

你需要Unicode,你可以使用TCHAR

TCHAR[] text = _T("Hello World.");
MessageBox(NULL, text, NULL, NULL);

char
是单个字符,而不是字符串

你需要Unicode,你可以使用TCHAR

TCHAR[] text = _T("Hello World.");
MessageBox(NULL, text, NULL, NULL);

你有两个基本问题。首先,
char
只能包含一个字符,不能包含字符串。其次,您有一个“窄”字符串文本,但(显然)您正在使用应用程序的Unicode构建,其中
MessageBox
希望接收宽字符串。您想要:

wchar_t text1[] = L"hello world";
或:

或(通常):

…但请注意,
std::wstring
不能直接传递到
Messagebox
。调用
MessageBox
时,您需要传递
text1.c_str()
,或者为
MessageBox
编写一个小包装,它接受(引用)一个
std::wstring
,类似于:

void message_box(std::wstring const &msg) {
     MessageBox(NULL, msg.c_str(), NULL, MB_OK);
}

你有两个基本问题。首先,
char
只能包含一个字符,不能包含字符串。其次,您有一个“窄”字符串文本,但(显然)您正在使用应用程序的Unicode构建,其中
MessageBox
希望接收宽字符串。您想要:

wchar_t text1[] = L"hello world";
或:

或(通常):

…但请注意,
std::wstring
不能直接传递到
Messagebox
。调用
MessageBox
时,您需要传递
text1.c_str()
,或者为
MessageBox
编写一个小包装,它接受(引用)一个
std::wstring
,类似于:

void message_box(std::wstring const &msg) {
     MessageBox(NULL, msg.c_str(), NULL, MB_OK);
}

C/C++中的字符串文字不是
char
,而是
char
值的集合。声明这一点的惯用方式是

const char* text1 = "hello world";

C/C++中的字符串文字不是
char
,而是
char
值的集合。声明这一点的惯用方式是

const char* text1 = "hello world";

char
仅包含一个字符,而不是一个字符数组

所以只需使用指向Unicode字符的常量字符串的指针


lpcwstrtext1=L“你好,世界”

char
仅包含一个字符,不包含字符数组

所以只需使用指向Unicode字符的常量字符串的指针



lpcwstrtext1=L“你好,世界”

char text1[]=…
就是你要找的。嗯,
wchar\u t text1[]
(或者
std::wstring
)在C++中,你将使用<代码> STD::String 。这里几乎没有人提到在处理WiAPAPI错误时使用的是C2039:“String”:不是“STD”代码>成员char Text 1[] =……/>代码>是你要找的。在C++中,你将使用<代码> STD::String 。这里几乎没有人提到在处理WiAPAPI错误C2039:“String”时,应该使用宽版本:不是STD'CalpReC2664:MasaGeBxw的成员:不能将参数2从“char(12)”转换为“LPCWSTR”@ USER 2626531编辑答案。您只需要Unicode字符。错误C2664:“MessageBoxW”:无法将参数2从“char[12]”转换为“LPCWSTR”@user2726531编辑了答案。您只需要Unicode字符。错误C2664:“MessageBoxW”:无法将参数2从“const char*”转换为“LPCWSTR”@user2726531
LPCWSTR
引用Unicode字符串,而
char*
LPCSTR
引用ANSI字符串。如果需要unicode字符串,请使用
LPCWSTR
并将声明更改为
L“hello world”
错误C2664:“MessageBoxW”:无法将参数2从“const char*”转换为“LPCWSTR”@user2726531
LPCWSTR
引用unicode字符串,而
char*
LPCSTR
引用ANSI字符串。如果需要unicode字符串,请使用
LPCWSTR
并将声明更改为
L“hello world”
第一个选项有效。第二个选项不起作用:错误C2664:“MessageBoxW”:无法将参数2从“const char*”转换为“LPCWSTR”。第一个选项起作用。第二个选项没有:错误C2664:'MessageBoxW':无法将参数2从'const char*'转换为'LPCWSTR'@user2726531:听起来您需要添加
#include
。但现在发生了一个新错误:错误C2601:'MessageBoxW':本地函数定义不正确illegal@user2726531:啊,我搞砸了——因为
MessasgeBox
是一个宏,它用
MessasgeBoxW
替换了上面的
MessageBox
函数的名称。只需将其重命名为其他名称。@user2726531:听起来您需要添加
#include
。但现在出现了一个新错误:错误C2601:“MessageBoxW”:本地函数定义为illegal@user2726531:啊,我搞砸了——因为
MessasgeBox
是一个宏,它将上面的
MessageBox
函数的名称替换为
MessasgeBoxW
。把它改名成别的名字。