类型为“ const wchar_t *”的值不能用于初始化类型为“ const PWSTR”的实体

时间:2019-12-22 19:27:18

标签: c++ windows visual-studio

我有一个Visual Studio 2019 C ++项目,该项目在一个头文件中具有此定义:

static const PWSTR s_rgComboBoxStrings[] =
{
    L"First",
    L"Second",
    L"Third",
};

在这种情况下,将显示此错误:

a value of type "const wchar_t *" cannot be used to initialize an entity of type "const PWSTR"

那是为什么?如果我使用PCWSTR而不是const PWSTR会编译,但是问题是Windows SDK .h文件中存在相同的问题,因此修改Windows .h文件不是一个好主意。

奇怪的是,我有另一个项目具有完全相同的定义(因为我刚刚复制并粘贴了代码),并且该项目可以完美地编译。

我已经比较了项目设置,但看起来它们都是一样的。

我曾考虑过复制所有项目文件,然后根据我自己的项目要求重命名文件并进行更改,但是我想先找出该项目的问题。

问候 海梅

1 个答案:

答案 0 :(得分:2)

假设我们沉重

typedef struct T * PT;

在这种情况下为const PT != const T*,但为const PT == T* const

在此示例中可见

struct T 
{
    void operator++();
};
typedef struct T * PT;

void fn (const T* q)
{
    const PT p = q;// (1) Conversion loses qualifiers
    p++;           // (2) you cannot assign to a variable that is const
    *p = *q;       // (3) ok
}