将CHAR16*设置为#define字符串?

And*_*ini 1 c c++ variable-assignment

对于正确的方法,我有点困惑.我有一个#DEFINE包含字符串,我有一个CHAR16*我想设置为该字符串.我该如何正确地做到这一点?我试过了:

#DEFINE MYSTRING "HELLO"

CHAR16* THISONE;

THISONE = MYSTRING;
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?我希望能够打印出字符串THISONE.我收到有关不兼容类型的编译器警告.我确定我错过了一些小事?

Car*_*rum 5

您正在定义一个窄字符串文字"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++.