2012-08-12 41 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 2012-08-12 10:06:04

回答

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 2012-08-12 10:09:21

+0

@ Sharpless512沒有其他辦法。它應該用新的更改列表替換之前的列表。 – jahhaj 2012-08-12 10:10:28

+0

它的工作,這是我的功能: void Wielerploeg :: setWielrennerList(list newWielrennerList){ \t wielrenners = newWielrennerList; } – Sharpless512 2012-08-12 10:12:58