【问题标题】:I cannot initializate WCHAR我无法初始化 WCHAR
【发布时间】:2018-09-02 14:34:46
【问题描述】:

我需要制作和 WCHAR。 但它不会工作,我总是得到一个错误:

Error   C2440   'initializing': cannot convert from 'const wchar_t [11]' to 'WCHAR *'
 StateError (active)    E0144   a value of type "const wchar_t *" cannot be used to initialize an entity of type "WCHAR *

我的代码:

WCHAR *Testlooll = L"TEST";

【问题讨论】:

  • 重复?伙计们真的吗? WCHAR* 与 TCHAR* 有什么关系(您的“ANSWER”副本中有什么内容)?
  • 备案;由于缺少minimal reproducible example投票决定将其作为离题结束。

标签: c++ visual-c++


【解决方案1】:

L"TEST"const wchar_t[5] 类型的字符串文字,它是 const 字符数组(因为文字存在于只读内存中)。您正在尝试初始化一个 WCHAR*,它是一个指向 非常量 字符的指针,以指向该数组。

初始化一个指向 non-const 字符数据的指针以指向 const 字符数据数组是 C++98 中的 deprecated(以保持向后兼容遗留代码),并且在 C++11 以后是非法的。

你需要修改Testlooll的声明:

const WCHAR *Testlooll = L"TEST";

或者:

LPCWSTR Testlooll = L"TEST";

【讨论】:

    【解决方案2】:

    除了 Remy Lebeau 的回答之外,如果由于某种原因您无法修改 Testlooll 的定义。您可以将 const 数组转换为 wchar_t*。例如,

    struct someLibaryType
    {
        WCHAR *Testlooll
    };
    
    someLibaryType a;
    a.Testlooll = (wchar_t*)L"TEST";
    

    可能有人认为应该转换为 WCHAR* 与 Testlooll 的定义类型保持一致。但是在这种情况下,您已经使用 L 来标识一个字符串,所以它必须是 wchar_t*。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2021-09-02
      • 2021-12-30
      • 1970-01-01
      • 2022-01-15
      • 2020-01-22
      • 2017-03-26
      相关资源
      最近更新 更多