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”@user2726531LPCWSTR
引用Unicode字符串,而char*
或LPCSTR
引用ANSI字符串。如果需要unicode字符串,请使用LPCWSTR
并将声明更改为L“hello world”
错误C2664:“MessageBoxW”:无法将参数2从“const char*”转换为“LPCWSTR”@user2726531LPCWSTR
引用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
。把它改名成别的名字。