2015-01-05 32 views
-1

我必須創建一個對象列表,爲了保持它儘可能平滑,我想使用std :: vector而不是常規的對象數組。但是我不完全知道如何正確使用它們。以下是我的課程中的示例代碼,我嘗試將對象添加到vecor中,並使用第二種方法顯示它們。我不能在C++中創建合適的std :: vector

private: 
vector <Student> stud; 
public: 
void Student::dodaj(){ 
stud.push_back(Student(getNaz(), getImie(), getLeg(), getRok())); 
} 

void Student::wypisz(){ 
cout << "Lista osob:\n"; 
for (int i = 0; i < 1; i++) 
{ 
    cout << endl; 
    cout << "Nazwisko: " << stud[i].nazwisko << endl; 
    cout << "Imie: " << stud[i].imie << endl; 
    cout << "Numer indeksu.: " << stud[i].legitymacja << endl; 
    cout << "Rok studiow: " << stud[i].rok << endl; 
} 

我的主要:

Student st("Kowalski", "Jan", 123455, 2); 
Student test1("Nowak", "Jan", 123, 2); 
st.dodaj(); 
test1.dodaj(); 
test1.wypisz(); 

然而的輸出結果是隻有一個至極對象我使用wypisz(印刷/顯示)方法,在這種情況下爲test1,所顯示,而不是兩個的他們 - st和test1。任何想法如何解決這個問題?

+0

http://sscce.org –

+2

@LightnessRacesinOrbit或SO特定版本[MCVE](http://stackoverflow.com/help/mcve)。 – Angew

+1

你在哪裏添加兩個對象到同一個向量? –

回答

1

看來studStudent的成員,這意味着每個Student對象都包含自己的向量。當您對某個學生致電dodaj時,它只會將其自己的詳細信息添加到其包含的向量中。

st.dodaj(); // Adds details of st to st's own vector 
test1.dodaj(); // Adds details of test1 to test1's own vector 

// Now we have one vector inside st containing a single element 
// and one vector inside test1 containing a single element  

test1.wypisz(); // Prints elements from test1's vector 

相反,你的載體應該是你Student類的(或至少是靜態的)之外。一種選擇是要做到這一點:

Student st("Kowalski", "Jan", 123455, 2); 
Student test1("Nowak", "Jan", 123, 2); 

std::vector<Student> stud; 
std.push_back(st); 
std.push_back(test1); 

您可能需要有一個包含此向量另一個類(也許School?)。

+0

值得指出的是UB有一個不完整類型的標準庫容器。 – juanchopanza

+0

所以如果我創建另一個類,我的學生類應該從它派生出來?或者在這種情況下不需要繼承? – user4165421

+0

@ user4165421繼承會不正確。這意味着一個'學生'*是一個'學校' - 絕對不對。相反,一個「學校」*有一個「學生」向量(這是一個成員所代表的關係)。 –

相關問題