2010-01-14 7 views
1

는 "& 헌장 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 단지를 받아들이는 것입니다을 로그인 할 필요가 반전

+1

무엇이'CString'입니까? 당신은 ATL/MFC를 참조합니까? C++에서 표준 문자열은'std :: string'입니다. 'CString'은 무엇이든 될 수 있습니다. 예를 들어 코드 기반의 동료가 코딩 한 클래스 일 수 있습니다. –

+0

//log.LogDebug(CString(buf)); \t //log.LogDebug(buf); // str = buf; //log.LogDebug(str); 위의 코드 중 어느 것도 작동하지 않았습니다 ... – Reversed

+0

그러면 문제가 다른 곳에서 발생합니다. 'LogMethod'에 대한 코드를 보여주십시오. – avakar

답변

1

MFC CString에 관해서는 말할 수있는 한, 명시 적이 지 않은 생성자가 TCHAR const *이어야합니다. 즉, 다음과 같이 작동해야합니다.

log.LogMethod(buf); 

표시되지 않으면 오류 메시지를 게시하십시오.

+0

오류가 없습니다 ..... 그냥 로그가 없습니다. – Reversed

0
CString cs; 
cs = buf; 

log.LogMethod(cs) 
+0

오류가 없습니다. ..... 그냥 로그가 없습니다. – Reversed

1
log.LogMethod(CString(buf)); 

이 컴파일러는 자동으로 인수가 참조 때문에 적절한 생성자를 사용하여 CString을 객체를 생성하지 않습니다 문제를 방지합니다 (인수가 "보통"CString을했다 경우는 것이다).

+0

매개 변수가'CString' 또는'CString const &'두 경우 모두 변환이 수행됩니다. 후자의 경우 임시가 만들어져 참조에 바인딩됩니다. – avakar

+0

그것은 일반적인 변환의 경우에 해당하지만 CString 의 경우 생성자 (char *를 허용하는)가 명시 적으로 선언 되었기 때문에 사실이 아닙니다. 내가 잘못하지 않는 한 컴파일러가 자동으로 선택할 수 없도록 유지합니다. 그러한 전환을 위해 그것은 CString & const 일 때 VS6 (명시 적으로 표시되지 않음)에서 작동하지만 VS2005에서는 작동하지 않는다고 말했습니다. 이유 : 'const char [5]'에서 'const CString'으로 변환 할 수 없습니다 클래스 'ATL :: CStringT '의 생성자가 '명시 적'으로 선언되었습니다. – Ruddy

+0

많은 기존 코드를 손상시킬 수 있으므로 Microsoft가 버전 간 모호성을 변경하게 될지 의심합니다. 게다가, 설명서 (http://msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx)는 명확하게 생성자가 명시 적이지 않다는 것을 보여줍니다. 'char const * '를 매개 변수로 전달하면서 유니 코드로 컴파일하려고하지 않았습니까? (명시 적으로 비 TCHAR 생성자를 트리거 할 것입니다)? – avakar

관련 문제