需要登錄使用LogMethod()的問題下面BUF的內容是 LogMethos只接受 「常量的CString &」如何從一個字符數組創建一個CString?
char buf[1024];
strcpy(buf, cErrorMsg);
// need to pass to LogMethod "buf" how do i do that?
log.LogMethod(const CString &);
Thans 啓
反相
需要登錄使用LogMethod()的問題下面BUF的內容是 LogMethos只接受 「常量的CString &」如何從一個字符數組創建一個CString?
char buf[1024];
strcpy(buf, cErrorMsg);
// need to pass to LogMethod "buf" how do i do that?
log.LogMethod(const CString &);
Thans 啓
反相
如果你在談論MFC CString
,據我所知,它應該有一個非明確的構造函數,採用TCHAR const *
。換句話說,以下應該起作用。
log.LogMethod(buf);
如果沒有,請發佈錯誤信息。
沒有錯誤.....只是沒有記錄 – Reversed 2010-01-14 18:29:14
log.LogMethod(CString(buf));
這將避免其中使用適當的構造,因爲該參數是一個參考,編譯器將不會自動創建CString對象的問題(這將具有如果參數是一個「純」的CString)。
這是沒有區別,參數是'CString'或'CString常量&',在這兩種情況下都會執行轉換。在後一種情況下,將創建臨時文件並與參考文件綁定。 – avakar 2010-01-14 16:35:37
在通用轉換的情況下是這樣的,但是對於CString 這是不正確的,因爲構造函數(接受char *)已被聲明爲明確的,除非我錯了,否則會使編譯器無法自動選擇它用於這種轉換。當它的CString&常量,但它在VS2005中不起作用 原因:不能從'const char [5]'轉換爲'const CString' 類'ATL :: CStringT
我非常懷疑微軟會改變版本之間的顯式性,因爲它會破壞很多現有的代碼。此外,文檔(http://msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx)清楚地顯示構造函數不是顯式的。你確定你沒有嘗試編譯爲Unicode,同時仍然通過'char const *'作爲參數(這確實會觸發顯式的非TCHAR構造函數)? – avakar 2010-01-14 21:46:32
什麼是'CString'?你是指ATL/MFC?在C++中,標準字符串是'std :: string'。 'CString'可以是任何東西,例如代碼庫中的同事編碼的類。 – 2010-01-14 15:46:15
//log.LogDebug(CString(buf)); \t //log.LogDebug(buf); // str = buf; //log.LogDebug(str); 上面的代碼都沒有工作... – Reversed 2010-01-14 18:27:54
然後問題在別的地方。告訴我們'LogMethod'的代碼。 – avakar 2010-01-14 21:47:29