2015-01-30 2 views
0

여기에 코드입니다 :왜 (int i = 0; i <THE_WORD.length(); ++ i)가 " '<signed & unsigned mismatch"를 반환합니까?

for (int i = 0; i < THE_WORD.length(); ++i) 

와 나는 다음과 같은 오류가 발생합니다 : '<을'서명/부호 불일치

THE_WORD은 다음과 같이 초기화 : 내가하려고

const string THE_WORD; 

을 "교수형 집행자"프로그램을 만드십시오 (지금 당장 cpp를 배우십시오). 이것은 forster 루프의 일부로, 플레이어가 추측해야 할 단어를 반복하고 별표에서 추정 된 문자로 문자를 변경합니다.

내 질문에 대한 답변을 더 많이 게시해야하는지 알려주세요.

+0

위의 링크 거래를 size()'대신'length()'를 사용하지만 똑같은 문제입니다. – CoryKramer

+0

문자열 길이는 음수 일 수 없으므로 (생각하면)'std :: string :: length()'는 ** 부호없는 ** 수량을 반환합니다. –

+0

''size_t uint32_t uint8_t'' 등은 naked 유형의 크기가 플랫폼에 따라 다르므로 "naked"int 및 "unsigned int"유형을 사용하는 것이 좋습니다. 예를 들어 int를 unsigned int로 변경하고 컴파일을 x64로 전환하면 64 비트 컴파일에서 size_t는 8 바이트이고 unsigned int는 4 바이트 길이이므로 다음 문제가 발생합니다. – BitTickler

답변

6

length() 호출에 의해 반환 된 유형은 보통 typedef 인 인 size_t입니다. 그렇기 때문에 int 인 부호있는 정수와 std::string::length()이 반환하는 값인 size_t 형식 사이의 부호있는/부호없는 불일치가 있습니다.

하는 것은 올바른 size_t 또는 다른 부호없는 형식에 i 변수의 유형을 변경할 생각하게하지만, 동일 유형 (size_tsize_t)하게하는 것이 좋습니다하려면`와

for (size_t i = 0; i < THE_WORD.length(); ++i) 
+0

설명을 주셔서 감사합니다.이 책의 4 장에 있지만 아직 size_t를 언급하지 않았습니다! 미래를 알기 좋습니다! – qLu

관련 문제