2011-01-06 5 views
0

Format(); 함수는 문자열 리터럴과 int를 CString 변수로 결합합니다. 나는이 일을 여러 가지 방법을 시도, 그들에 대한 코드는 여기에 있습니다 :C++에서 형식 변환 중 오류가 발생했습니다.

// declare variables used 
CString _CString; 
int _int; 

// try to use format function with string literal 
_CString.Format("text",_int); 

// try to use format function with C-Style cast 
_CString.Format((wchar_t)"text",_int); 

// try to use format function with static_cast 
_CString.Format(static_cast<wchar_t>("text"),_int); 

첫 번째 오류 C2664를 반환 '무효 ATL :: CStringT :: 형식 (CONST의 wchar_t *, ...)를' : 매개 변수 1을 'const char [33]'에서 'const wchar_t *'로 변환 할 수 없습니다.

두 번째로 오류는 없지만 한자로 텍스트가 표시됩니다.

세번째는 오류 C2440를 반환 'static_cast'* s의 wchar_t를 위해 CStrings 변환하는 '은 wchar_t'

상관 아이디어 'CONST CHAR [33]으로 변환 할 수 있습니까?
감사

+0

이것은 매우 궁합이 좋지만 기술적으로 말하면 밑줄에 대문자가 오는 이름을 변수 이름으로 사용하지 않아야합니다. 그 이름들은 (악의적 인 악의적 인 매크로를 포함하여) 그들이 사용하는 어떤 용도로든 구현에 의해 예약됩니다. 나는 이것을 FYI로 언급 할 것이라고 생각했다. – templatetypedef

답변

1

문제 은 (괜찮습니다) 유니 코드 빌드를 수행하고, 그래서

_CString.Format(); 

기능은 내가 넓은 문자열로 첫 번째 매개 변수를 기대한다는 것입니다.

_CString.Format(L"text: %d",_int); 

: 물론

_CString.Format(L"text",_int); 

, 당신은 실제로 CString을로 포맷 된 int 변수를 얻기 위해 지정이 필요합니다 : 당신은 리터럴 넓은 문자열을 형성 L"" 구문을 사용합니다 tchar.h 헤더를 포함하는 경우 Microsoft의 매크로를 사용하여 UNICODE를 만들지 여부에 따라 문자를 넓은 문자 또는 일반 문자 (그렇지 않으면 ANSI라고도 함)로 만들 수 있습니다.

_CString.Format(_T("text: %d)",_int); 

하지만 ANSI 지원이 필요한 레거시 프로그램을 지원하지 않으려면 tchar.h 항목을 사용하지 않아도됩니다.

+0

감사합니다 !!! L ""문법이 효과가있었습니다! –

2

글쎄, 내가 일을 할 것입니다 무엇을 타겟팅 할 어떤 문자열 유형 완전히 명확하지 않다하지만 여기 :

_CString.Format(_T("%d"), _int); 

는 유니 코드로 멀티 바이트 문자열을 던져 입력 시도 문자열을 컴파일 할 수 있지만 여전히 멀티 바이트 문자열이기 때문에 문제가 발생합니다. 원하는 경우 문자열을 변환하지 않고 전체 문자열을 변환해야합니다.