2011-05-02 2 views
0

필자는 목록의 내용을 파일에 쓰는 쓰기 기능을 사용하고 있습니다. 목록에는 숫자 만 들어 있습니다.연결된 목록의 내용을 파일에 쓰는 방법

list<int>::iterator pos; 
    for (pos = listStorage.begin(); pos != listStorage.end(); ++pos) 
    { 
     out << *pos << endl; 
    } 
    return out; 

컴파일 중 오류가 발생합니다.

오류 C2679 : 이진 '='없음 연산자 '표준 : 목록을 < _Ty를> :: _ const_iterator를 < _Secure_validation>'형의 오른쪽 피연산자를 취하는 발견 (또는 허용 가능한 전환 없음)

아무도 도와 줄 수 있습니까? 감사합니다

+0

출력 문장을 주석 처리하면 작동합니까? –

답변

2

저는 이것이 const 문제라는 것을 확신합니다. listStorage 객체가 const로 선언 되었습니까?

std::copy(listStorage.cbegin(), listStorage.cend(), 
      std::ostream_iterator<int>(out, "\n")); 

이 아마 당신이보고있는 문제를 방지하고, 부수적으로합니다 : 그렇다면, 당신은 오히려 명시 적 루프보다 내가하는 알고리즘을 사용하는 것

const list<int>::iterator pos; 
+0

내 listStorage를 다음과 같이 선언했습니다. 목록 listStorage; – TweedyMK

+1

저에게 const 문제가되는 것처럼 보입니다. 예를 들어, const 멤버 함수에있는 경우입니다. – Puppy

+1

'list :: iterator'을'list :: const_iterator'로 변경하면 어떻게됩니까? –

2

로 반복자를 선언해야 코드를 정리하고 거의 확실하게 빠르게 실행하십시오 (속도가 endl 대신 "\n"을 사용함에도 불구하고).

+0

왜'cbegin'과'cend'입니까? 그들은 존재합니까? – Nawaz

+0

예, 좋은 점, cbegin 및 cend가 std :: list에 없습니다. – TweedyMK

+0

@Nawaz,'cbegin'/cend'는 C++ 11 (일명 C++ 0x)에서 새로 추가되었습니다. –