2016-09-27 74 views
0

我正在嘗試基於卡技巧編寫一個簡單的應用程序。在該應用程序的某些部分,我不得不將主甲板交替分割成較小的甲板。我寫了一個簡單的循環來做到這一點,但在調用套牌後仍然是空的。我粘貼下面的代碼部分。你知道我犯了什麼錯誤嗎?當然,如果你想檢查整個程序,你可以做here。該方法由Deck類的「main」實例調用,較小的deck是該方法的參數。拆分後的空向量

void split_deck(Deck one, Deck two, Deck three, Deck four, int time) 
{ 
    Deck* on=&one; 
    Deck* tw=&two; 
    Deck* th=&three; 
    Deck* fo=&four; 
    on->dck.clear(); 
    tw->dck.clear(); 
    th->dck.clear(); 
    fo->dck.clear(); 
    int buff; 

    for (int i = 0; i < 24; i++) 
    { 
     buff = dck[i]; 
     if (i%time == 0) on->dck.push_back(buff); 
     if (i%time == 1) tw->dck.push_back(buff); 
     if (i%time == 2) th->dck.push_back(buff); 
     if (i%time == 3) fo->dck.push_back(buff); 
    } 
} 
+5

你已經通過價值傳遞了所有套牌,這意味着這些都是在該函數結束時消失的所有副本。另外,指針是什麼? – NathanOliver

+0

@NathanOliver我偷偷的懷疑是,OP認爲「我想修改原始文件,我需要一個指向它的指針」,但沒有考慮到副本已經發生(因爲如你所提到的那樣通過了值傳遞)。 P.S:參考文獻的效果會更好。 – Borgleader

+0

「buff = dck」中的''dck'' [i];''? –

回答

2

要在彌敦道的評論擴大,你應該通過引用傳遞的載體:

void split_deck(Deck& one, Deck& two, Deck& three, Deck& four, int time) 

這樣一來,這些變化將被保留,並給調用者可見。 你現在(通過值)傳遞向量的方式,你基本上正在他們的副本內功能;函數外的實際矢量不會改變。

而且,是的,請擺脫這些指針(我假設他們在那裏進行測試),並使用你傳遞給函數的矢量直接。

+2

你也應該建議他擺脫所有的指針,因爲他們不需要。 – NathanOliver