2013-04-16 2 views
1

Кажется, что атрибут test aisbn успешно хранит данные, вызывающие setCode(), setDigit(). Но проблема начинается с сбоя, в то время как я пытаюсь сохранить эти значения в list<test> simulНе удается сохранить значения в списке

Атрибут list принимает значение после setDigit(), но код. Как я могу поместить оба кода и цифры в атрибут списка? Я не вижу, где проблема. Код:

#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 цикл следующим образом:

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

хотя push_back не отменяет итераторы для std::list я думаю более читаемым является установка итератора, в котором вы его используете. На основании вашего ответа вы должны изменить copy constructor:

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

забыть цикл for. Интересно, что simul.push_back (aisbn) принимает значение цифры только из setDigit(). Не могли бы вы посмотрите в код (INT I = 0; я <(целое) 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

Many thx. проблема решена – user2282596

0

как об использовании 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++; 
    } 

итераторы, указатели и ссылки, относящиеся к контейнеру признаны недействительными. В противном случае недействителен только последний итератор.

+0

Я должен был использовать вектор раньше, если может. Использовать список обязательно! – user2282596

Смежные вопросы