我使用WTL CString類。這個類有一個重載的操作符:運算符的C++重載此
operator LPCTSTR() const
{
return m_pchData;
}
所以我用這樣的:
CString sText = _T("I like CString!");
TRACE("%s", sText);
和我:
Output: I like CStrings!
但之後我加了一些自己的具體轉換方法和運營商:
operator LPWSTR() const
{
return ConvertStringToWide();
}
和
operator LPSTR() const
{
return ConvertStringToAnsi();
}
,現在我得到的不是:
Output: I like CStrings!
這樣的:
Output: &%?....
製作後一些測試,我發現,CString的現在,而不是調用operator LPCTSTR()並返回m_pchData它返回這個類的指針! 所以我總是得到指向類的指針而不是m_pchData。
所以我的問題是:我如何告訴CString類默認使用運算符LPCTSTR()而不返回這個指針?
您能否爲您的問題創建一個最小且完整的示例?從上面,你正在調用一些宏'TRACE'(它包裝了一些未知的函數,可能涉及C風格的變量),並且你修改了別人的'CString'(你是在你的項目中本地還是全局?)。如果沒有[sscce](http://sscce.org/),我不得不復制你的確切環境來弄清楚發生了什麼。 – Yakk
我的猜測是它是Win32 API代碼。 'CString'是MFC的字符串類,'TRACE'是一個VC/Windows宏。請注意,這只是一個澄清;最小的獨立樣本仍然是一個非常好的主意。 – yzt
調用諸如'printf'等可變參數函數絕不會導致調用用戶定義的轉換。如何定義「TRACE」? –