[英]error : C2664 'void RecursiveDelete(LPWSTR,LPWSTR)': cannot convert argument 2 from 'const wchar_t [12]' to '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 類型的實體
有任何想法嗎?
謝謝
LPWSTR
是wchar_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.