![](/img/trans.png)
[英]C++ C2440 Error, cannot convert from 'std::_String_iterator<_Elem,_Traits,_Alloc>' to 'LPCTSTR'
[英]c++ type conversion: error C2440: 'initializing' : cannot convert from 'HRESULT' to 'std::basic_string<_Elem,_Traits,_Alloc>'
我在Visual Studios 2012中嘗試了以下方法:
TCHAR szPath[MAX_PATH];
std::wstring applicationdatafolder = SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath);
MessageBox(NULL, applicationdatafolder, NULL, MB_OK);
我得到那些錯誤:
錯誤C2440:“正在初始化”:無法從“ HRESULT”轉換為“ std :: basic_string <_Elem,_Traits,_Alloc>”(第二行)
錯誤C2664:“ MessageBoxW”:無法將參數2從“ std :: wstring”轉換為“ LPCWSTR”(第3行)
SHGetFolderPath
函數確實返回一個HRESULT
以顯示一切是否正確。 實際的“字符串”將存儲在最后一個參數指向的位置:ergo到szPath
。 現在,您想要的是通過std::wstring applicationdatafolder (szPath)
從此char數組構造字符串並使用它
Q的附錄出現在評論中
wstring foo(bar)
VS wstring foo = bar
據我所知(隨意編輯,如果我錯了)的拷貝構造函數的使用更有效:
wstring foo(bar)
bar
內容分配足夠的內存 bar
復制內容 wstring foo = bar
是必需的wstring foo(); foo = bar;
wstring foo(); foo = bar;
wstring foo
調用不帶參數的默認構造函數) operator=
bar
內容 bar
復制內容 當然,編譯器可能會識別冗余的步驟,優化代碼,但通過使用以前版本中,我們寫在第一位高效的代碼,不依賴於編譯器optimiziation
同樣,前一個版本的含義更為清晰,因為其讀為“從bar
創建一個名為foo
的wstring
”,而后者為“創建一個名為foo
的wstring
並為其分配bar
”。 注意fakt bar
可以是任意類型,盡管編譯器了解您想要的內容,但在賦值中包含string
和某些mywierdtype
看起來似乎很奇怪。
TCHAR szPath[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath);
std::wstring applicationdatafolder(szPath);
MessageBox(NULL, applicationdatafolder.c_str(), NULL, MB_OK);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.