簡體   English   中英

“正在初始化”:無法從“const wchar_t[35]”轉換為“LPWSTR”

[英]'Initializing': Cannot convert from 'const wchar_t[35]' to 'LPWSTR'

我目前正在學習 C++ 並想更改我的桌面牆紙。 但是我在上面收到了這個錯誤。

#include <string>
#include <iostream>
#include <Windows.h>

using namespace std; 

int main() {

LPWSTR test = L"C:\\Users\\user\\Pictures\\minion.png";

int result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, 
test, SPIF_UPDATEINIFILE);


}

“Const wchar_t*”類型的值不能用於初始化 LPWSTR 類型的實體

有任何想法嗎?

謝謝

LPWSTRwchar_t*的別名,即指向非常量字符的指針。

字符串文字是 const 字符數組,在您的情況下是const wchar_t[35] 它衰減為指向 const 字符的指針,指向文字中的第一個字符。

您不能將指向 const 的指針分配給指向非 const 的指針。 這將允許對只讀 memory 進行寫訪問。

請改用LPCWSTR ,它是const wchar_t*的別名。

LPCWSTR test = L"C:\\Users\\user\\Pictures\\minion.png"; 

MSVC 編譯器變得越來越不寬容。 總的來說這是一件好事。

L"C:\\Users\\user\\Pictures\\minion.png"const wchar_t[34]類型的文字(額外的元素用於字符串終止符)。 在某些情況下,這會衰減const wchar_t*指針。

LPWSTR不是const指針類型,因此在標准 C++ 編譯器上編譯將失敗。

解決方案是使用const指針類型LPCWSTR

解決此編譯錯誤的另一種方法是在項目 Properties -> C/C++ -> Language 中將 Conformance Mode 設置為 Default。 至少它在我的 VS2019 項目中有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM