And*_*ini 1 c c++ variable-assignment
对于正确的方法,我有点困惑.我有一个#DEFINE包含字符串,我有一个CHAR16*我想设置为该字符串.我该如何正确地做到这一点?我试过了:
#DEFINE MYSTRING "HELLO"
CHAR16* THISONE;
THISONE = MYSTRING;
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我希望能够打印出字符串THISONE.我收到有关不兼容类型的编译器警告.我确定我错过了一些小事?
您正在定义一个窄字符串文字"HELLO",但尝试使用CHAR16指针指向它.这不是一个兼容的任务.如上所述clang:
example.cpp:9:13: error: assigning to 'wchar_t *' from incompatible type
'const char [6]'
THISONE = MYSTRING;
^ ~~~~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)
(我改变了类型CHAR16 *,wchar_t *因为我不在Windows上 - 语义是相同的).
要修复它,您需要L在字符串常量前面添加一个:
#define MYSTRING L"HELLO"
Run Code Online (Sandbox Code Playgroud)
然后它会编译.在C中,你已经完成了.但是,在C++中,您可能仍会收到警告:
example.cpp:9:15: warning: conversion from string literal to 'wchar_t *' is
deprecated [-Wdeprecated-writable-strings]
THISONE = MYSTRING;
^
example.cpp:3:18: note: expanded from macro 'MYSTRING'
#define MYSTRING L"HELLO"
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
将定义更改为:
const wchar_t *THISONE;
Run Code Online (Sandbox Code Playgroud)
修复那个警告.我想你的情况是:
const CHAR16 *THISONE;
Run Code Online (Sandbox Code Playgroud)
编辑说明 - 将来,请显示您的真实代码. #DEFINE(带大写字母)不是有效的C或C++.