2009-06-16 4 views
1
typedef map<wstring , IWString> REVERSETAG_CACHE ; 
REVERSETAG_CACHE::iterator revrsetagcacheiter; 
. 
. 
. 
wstring strCurTag; 
strCurTag = revrsetagcacheiter->second; //Error C2593 

오류 C2593 모호 : 연산자 =오류 : 연산자 =

왜 위의 할당이 오류를 줄 않습니다 모호? 그것은 VC6에서 작동합니다. VC9에서는 컴파일되지 않습니다.

+0

전체 오류 메시지를 알려주십시오. 가능한 통화 후보를 명시해야합니다. 아니면 정말로 "모호하다"고 말하는가? –

+2

그게 바로 오류가 말하는거야. 오류 C2593 : '='연산자가 모호합니다. – bobbyalex

답변

2

revrsetagcacheiter->second 유형 IWString이다. 따라서 컴파일되지 않습니다. 나는 VC6에서도 컴파일 될 것이라고 생각하지 않는다.

마지막으로 한번 시도해 보겠습니다. : BasicString 클래스가 c_str() 메소드입니까? 그렇다면 wstring을 사용하여 wstring으로 변환하십시오. std::wstring str(iter->second.c_str());

+0

VC6에서 정상적으로 컴파일됩니다. – bobbyalex

+0

IWString의 정의를 제공 할 수 있습니까? Neil이 제안한 것처럼 VC6이 여러 암시 적 변환을 수행하여 IWString에서 wstring을 생성하는 것으로 의심됩니다. – Naveen

+0

typedef 기본 문자열 > \t \t \t IWString; – bobbyalex

3

VC9는 (올바르게) VC9가 아닌 한 여러 개의 사용자 정의 변환을 적용 할 수 있습니다. 일반적인 문제에 대한 논의는 C++ implicit conversions을보십시오.

일반적인 해결책은 컴파일러가 직접 시도하지 않고 필요한 변환을 직접 제공하는 것입니다.

0

할당 된 것을 올바른 유형으로 캐스트하십시오.

는 예를 들면 :

strCurTag = (wstring)revrsetagcacheiter->second; 

더 나은 아직, 당신은 의미가 있습니다

IWstring strCurTag; 
0

일반적으로 암시 적 변환을 피하십시오. 즉, 모든 유형이 정확히 동일한 유형으로 작동하도록해야합니다. 특히 어떤 유형이 관련되어 있는지 알기는 쉽지 않습니다. 암시 적 변환에 의존하거나 의존하려고 시도하는 것은 좋은 생각이 아닙니다. 경우

그래서 :

strCurTag = static_cast<wstring>(revrsetagcacheiter->second); 

가 컴파일되지 않습니다, 우리는 문제에 대해 생각하기 시작한다.

+0

작동하지 않습니다. 그것은 오류 C2243 : '형식 캐스트': 'std_ex :: IWString *'에서 'const std :: allocator <_Ty>'로의 변환이 가능하지만 액세스 할 수 없습니다. – bobbyalex

+0

나는 포기한다. strCurTag를 IWString으로 바꿀 것이라고 생각합니다. IWstring을 wstring으로 변환하는 방법을 알려주시겠습니까? 다음은 IWstring c_str, bstr ....의 구성원입니다. – bobbyalex

+0

죄송합니다. 이러한 유형에 익숙하지 않습니다. 대체 유형을 사용하는 데 변경이 있습니까? 궁극적으로 모든 string-ish 유형은 일련의 문자를 줄 수 있어야합니다. 맞습니까? –