2013-04-16 2 views
1

test aisbnsetCode(), setDigit()과 같은 데이터를 성공적으로 저장하고있는 것으로 보입니다. 하지만이 값을 저장하려고 시도하는 동안 문제가 발생하기 시작합니다. list<test> simul목록에 값을 저장하지 못했습니다.

목록 속성은 setDigit()이 아닌 숫자의 값을 취하고 코드입니다. 코드와 숫자를 모두 목록 속성에 넣을 수 있습니까? 문제가 어디 있는지 알 수 없습니다. 코드는 : push_back 내가 생각 std::list에 대한 반복자를 무효화하지 않습니다

for(testitr = simul.begin(); testitr !=simul.end(); testitr++) 
    ^^^^^^^^^^^^^^^^^^^^^^^       ^^^^^^^^^ 

, 비록 :

#include <iostream> 
#include <stdlib.h> 
#include <string> 
#include <fstream> 
#include <list> 
using namespace std; 

class test 
{ 
    private: 
     string code; 
     int digit; 

    public: 
     //constructor 
     test(): code(""), digit(0) { } 

     //copy constructor 
     test(const test &other): 
     digit(other.digit) 
     { 
      for(unsigned int i=0; i < code.length(); i++) 
       code[i] = other.code[i]; 
     } 

     //set up the private values 
     void setCode(const string &temp, const int num); 
     void setCode(const string &temp); 
     void setDigit(const int &num); 


     //return the value of the pointer character 
     const string &getCode() const; 
     const unsigned int getDigit() const; 
}; 

const string& test::getCode() const 
{ 
    return code; 
} 
const unsigned int test::getDigit() const 
{ 
    return digit; 
} 
void test::setCode(const string &temp, const int num) 
{ 
    if((int)code.size() <= num) 
    { 
     code.resize(num+1); 
    } 
    code[num] = temp[num]; 
} 
void test::setCode(const string &temp) 
{ 
    code = temp; 
} 
void test::setDigit(const int &num) 
{ 
    digit = num; 
} 


int main() 
{ 
    const string contents = "dfskr-123"; 

    test aisbn; 
    list<test> simul; 
    list<test>::iterator testitr; 
    testitr = simul.begin(); 
    int count = 0; 

    cout << contents << '\n'; 
    for(int i=0; i < (int)contents.length(); i++) 
    { 
     aisbn.setCode(contents); 
     aisbn.setDigit(count+1); 
     simul.push_back(aisbn); 
     count++; 
    } 
    cout << contents << '\n'; 

    /*for(; testitr !=simul.end(); simul++) 
    { 
     cout << testitr->getCode() << "\n"; 
    }*/ 

} 

답변

0

것 같습니다 당신이 당신의 for 루프에 문제가있는 것처럼, 당신은 다음처럼 for 루프를 수정해야 당신이 그것을 사용하고있는 곳에서 iterator를 설정하는 것이 더 읽기 쉽다. vector

std::vector<test> simul; 

for(int i=0; i < (int)contents.length(); i++) 
    { 
     aisbn.setCode(contents); 
     aisbn.setDigit(count+1); 
     simul.push_back(aisbn); 
     count++; 
    } 

반복자, 포인터와 컨테이너에 관련 참조를 사용하는 방법에 대한 무효화하는 방법을

test(const test &other): code(other.code), digit(other.digit) {} 
         ^^^^^^^^^^^^^^^^ 
+0

for 루프를 잊어 버리십시오. 필자가 궁금해하는 것은 simul.push_back (aisbn)은 setDigit()에서 숫자 값만 가져 오는 것입니다. 당신의 코드에 볼 수 있었다 (INT I = 0; 나는 <(int)를 contents.length(); 내가 ++) \t \t { \t \t \t aisbn.setCode (내용을); \t \t \t aisbn.setDigit (count + 1); \t \t \t simul.push_back (aisbn); \t \t \t 카운트 ++; \t \t} – user2282596

+0

@ user2282596 수정 된 답변 –

+0

많은 thx. 문제가 해결되었습니다 – user2282596

0

: 당신의 응답을 바탕으로 당신은 또한 copy constructor을 수정해야합니다. 그렇지 않으면 마지막 반복기 만 무효화됩니다.

+0

할 수 있으면 가능한 한 일찍 벡터를 사용해야했습니다. 목록 사용은 필수적입니다 :) – user2282596

관련 문제