2010-01-14 40 views
1

需要登錄使用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 啓

反相

+1

什麼是'CString'?你是指ATL/MFC?在C++中,標準字符串是'std :: string'。 'CString'可以是任何東西,例如代碼庫中的同事編碼的類。 – 2010-01-14 15:46:15

+0

//log.LogDebug(CString(buf)); \t //log.LogDebug(buf); // str = buf; //log.LogDebug(str); 上面的代碼都沒有工作... – Reversed 2010-01-14 18:27:54

+0

然後問題在別的地方。告訴我們'LogMethod'的代碼。 – avakar 2010-01-14 21:47:29

回答

1

如果你在談論MFC CString,據我所知,它應該有一個非明確的構造函數,採用TCHAR const *。換句話說,以下應該起作用。

log.LogMethod(buf); 

如果沒有,請發佈錯誤信息。

+0

沒有錯誤.....只是沒有記錄 – Reversed 2010-01-14 18:29:14

0
CString cs; 
cs = buf; 

log.LogMethod(cs) 
+0

沒有錯誤.....只是沒有記錄 – Reversed 2010-01-14 18:36:32

1
log.LogMethod(CString(buf)); 

這將避免其中使用適當的構造,因爲該參數是一個參考,編譯器將不會自動創建CString對象的問題(這將具有如果參數是一個「純」的CString)。

+0

這是沒有區別,參數是'CString'或'CString常量&',在這兩種情況下都會執行轉換。在後一種情況下,將創建臨時文件並與參考文件綁定。 – avakar 2010-01-14 16:35:37

+0

在通用轉換的情況下是這樣的,但是對於CString 這是不正確的,因爲構造函數(接受char *)已被聲明爲明確的,除非我錯了,否則會使編譯器無法自動選擇它用於這種轉換。當它的CString&常量,但它在VS2005中不起作用 原因:不能從'const char [5]'轉換爲'const CString' 類'ATL :: CStringT '的構造函數被聲明爲'explicit' – Ruddy 2010-01-14 17:04:10

+0

我非常懷疑微軟會改變版本之間的顯式性,因爲它會破壞很多現有的代碼。此外,文檔(http://msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx)清楚地顯示構造函數不是顯式的。你確定你沒有嘗試編譯爲Unicode,同時仍然通過'char const *'作爲參數(這確實會觸發顯式的非TCHAR構造函數)? – avakar 2010-01-14 21:46:32

相關問題