2012-08-12 2 views
0

예를 들어 'Voornaam'을 목록에있는 개체에서 설정하려면 변경하고 싶습니다. 그러나 다른 이유와 함께 목록에 객체를 표시하면 어떤 이유로 변경되지 않습니다.목록에있는 개체에서 변수 변경 (C++)

"showWielrennerGegevens (* iter);"함수를 만들었습니다. 그러면 해당 객체의 모든 변수가 표시됩니다. 이 기능을 실행하면 변경 사항을 볼 수 있습니다. 나는이 목록에 개체를 표시하는 기능을 실행하지만하지

void Interface::wijzigPersoneelslid(Wielerploeg& wielerploegOB){ 

int input,inputWielrennerID,ingavekeuze; 
string ingaveString; 

int teller=0; 

cout << "Wat voor een type wil je wijzigen?" << endl; 
cout << "1 - Wielrenner" << endl; 
cout << "2 - Dokter" << endl; 
cout << "3 - Mecanicien" << endl; 
cin >> input; 

switch(input) 
{ 
    case 1:{//Wielrenner 
     cout << "Wielrenner" << endl; 

     list<Wielrenner> wielrennerslist = wielerploegOB.getWielrennersList(); 
     cout << "Welke wielrenner wil je wijzigen?" << endl; 

     // Alle objecten afprinten in de lijst 
     for (list<Wielrenner>::iterator it = wielrennerslist.begin(); it != wielrennerslist.end(); it++){ 
      Wielrenner wielrennerOB = *it; 
      cout << teller << " - " << wielrennerOB.getVoornaam() << " " << wielrennerOB.getAchternaam() << endl; 
      teller++; 
     } 
     cin >> inputWielrennerID; 

     // Naar het object gaan 
     int N = inputWielrennerID; /* index of the element you want to retrieve */ 
     if (wielrennerslist.size() > N){ 
      list<Wielrenner>::iterator iter = wielrennerslist.begin(); 
      std::advance(iter, N); 

      // 'it' points to the element at index 'N' 

      Wielrenner wielrennerOB2 = *iter; 
      //Wielrenner* wielrennerOB2 = *iter; 

      cout << "\n De geselecteerde wielrenner is: " << endl; 
      cout << " - " << wielrennerOB2.getVoornaam() << wielrennerOB2.getAchternaam() << endl; 

      cout << "\n Wat wil je aanpassen?" << endl; 
      cout << "1 - Voornaam" << endl; 
      cout << "2 - Achternaam" << endl; 
      cout << "3 - Telefoon" << endl; 
      cin >> ingavekeuze; 
      switch(ingavekeuze)                                     
      { 
       case 1:{ // voornaam 
        cout << "Ingave voornaam: "; 
        cin >> ingaveString; 
        //wielrennerOB2.setVoornaam(ingaveString); 
        (*iter).setVoornaam(ingaveString); 

        cout << "object " << endl; 
        showWielrennerGegevens(*iter); 
        break; 
       } 
       case 2:{ // achternaam 
        cout << "Ingave achternaam: "; 
        cin >> ingaveString; 
        wielrennerOB2.setAchternaam(ingaveString); 

        cout << "object " << endl; 
        showWielrennerGegevens(wielrennerOB2); 
        break; 
       } 
       case 3:{ // telefoon 
        cout << "Ingave telefoon: "; 
        cin >> ingaveString; 
        wielrennerOB2.setTelefoon(ingaveString); 
        break; 
       } 
       default:{ 
        cout << "Switch Default waarde - wielrenner wijzig" << endl; 
       } 
      } 
     }// if statement 
     break; 
    }// case 1 
    case 2:{ // dokter 
     cout << "Dokter" << endl; 
     break; 
    } 
    default:{ 
     cout << "Switch Default waarde - Interface" << endl; 
    } 
} // switch 

}

+0

당신이 무엇을 요구하고 있는지 분명하지 않습니다. – juanchopanza

답변

1

난 당신이 목록의 사본을 만들어 때문에 이런 일이 생각 도와주세요. 복사본은 변경하지만 원본은 변경하지 않습니다.

list<Wielrenner> wielrennerslist = wielerploegOB.getWielrennersList(); 

이 줄은 목록의 복사본을 만듭니다.

다음에해야 할 일은 말하기 어렵습니다. 아마도 이것을해야합니까?

list<Wielrenner> wielrennerslist = wielerploegOB.getWielrennersList(); 
... 
// make change to wielrennerslist 
... 
// copy changed list back to original 
wielerploegOB.setWielrennersList(wielrennerslist); 

이 방법은 setWielrennersList 메서드가있는 경우에만 작동하며, 그렇지 않으면 어쩌면 작성해야합니다.

+0

그러면 setWielrennersList (wielrennerslist) 함수는 새 목록을 이전 목록으로 바꿉니 까? – Sharpless512

+0

@ Sharpless512 다른 방법은 없습니다. 이전 목록을 새 변경 목록으로 바꿔야합니다. – jahhaj

+0

그것은 작동, 이것은 내 함수 : void Wielerploeg :: setWielrennerList (목록 newWielrennerList) { \t wielrenners = newWielrennerList; } – Sharpless512

관련 문제