2012-08-12 20 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