2012-08-02 6 views
0

안녕하세요 .obj 모델 파서를 작성하는 중 일부 코드에 문제가 있습니다.std :: copy를 사용할 때 오류가 발생했습니다.

V -5.000000 -1.000000 1.000000

그런 다음 문자열을 가져옵니다

std::istringstream iss(line.substr(1)); 

std::copy( 
std::istream_iterator<float>(iss),  
std::istream_iterator<float>(),  
std::back_inserter<std::vector<float>>(model.chunks.back().vectices) 
); 

그것은 기본적으로이 같은 인수로 전달 된 문자열을 복용 : 는 여기에 문제를 일으키는 코드입니다 그것으로부터 단지 이것 만 남았습니다 :

-5.000000-1.0 마지막으로 00000 1.000000

나는 표준 : : 사본을 사용하여 문자열 내에서 각 숫자 세트를 얻을 :

정점 [0] = -5.000000
정점 [1] = -1.000000

: 정점 [2] 1.000000

을 = 어쨌든 여기에 주요 문제는이 코드 줄에서 오류를 얻고 있다는 것입니다

std::back_inserter<std::vector<float>>(model.chunks.back().vectices)); 

"예상 토큰 ';' float을 얻었습니다. "내 코드는 여전히 컴파일되고 실행됩니다.

비록 그 코드의 수레를 std :: string의 것으로 바꾸더라도 나는 더 이상 오류를 얻지 못합니다.

std::copy( 
std::istream_iterator<std::string>(iss), 
std::istream_iterator<std::string>(), 
std::back_inserter<std::vector<std::string>>(model.chunks.back().vectices) 
); 

Qt Creator를 사용하고있어서 IDE 오류 일 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다!

+0

std :: back_inserter는 인수에서 유형을 추론 할 수 있습니다. – ForEveR

+1

'std :: back_inserter (model.chunks.back(). vectices)'를 써서 컴파일러가 형식 인자를 추론하도록하지 않는 이유는 무엇입니까? – Nawaz

+0

음 ... 그런 생각을하지 못했습니다. 또한 적은 코드가 필요합니다. 팁 고마워! – luveti

답변

4

IDE가 템플릿 사양의 >>을 이해하지 못할 수 있습니다. 이전 버전의 C++ 표준에서는 > >과 같이 각 > 사이에 공백을 넣어야했습니다. 그렇지 않으면 오른쪽 시프트 연산자 >>과 혼동 될 수있었습니다. 따라서 :

std::back_inserter<std::vector<float> >(model.chunks.back().vectices)); 
+1

좋은 이론이지만 그는 코드의 마지막 섹션에서'std :: string'과 함께 작동한다고 말합니다.이 섹션에는 공백없이 동일한'>>'시퀀스가 포함되어 있습니다. –

+0

아, 맞아요. 호기심. 그러나 구문 적 오류가있는 코드는 "컴파일하고 완벽하게 실행할 수 없으므로"IDE에만 해당됩니다. –

+0

>> 사이에 공백을 추가하면 오류가 사라졌습니다! 반드시 IDE가되어야합니다. 고마워요, 그리고 그렇게 빨리 답장 해 주셔서 감사합니다! – luveti

관련 문제