2012-12-24 30 views
3

我有一個類unit,與元素int holding[4];我如何在C創建一個「動態」指針++

void main() 
{ 
    vector<vector<unit> > allunits; 
    vector<vector<short> > selectedunits; //This contains certain indexes for the above vector 
    allunits.resize(2); 
    selectedunits.resize(2); 
    allunits[0].resize(5); 
    int *ptr = &allunits[0][selectedunits[0][0]].holding[0]; //obviously dysfunctional 
} 

我想是有這個指針改變它所指向的動態。當selectedunits[0][0]的值發生變化時,我想ptr自動指向新值allunits[0][selectedunits[0][0]].holding[0]。當selectedunits[0]是一個空向量時,ptr可以是任何東西,但它不能拋出運行時錯誤,這是它現在所做的。

所以,如果我以後有代碼selectedunits[0].push_back(2);,我想ptr指向allunits[0][2].holding[0],再行selectedunits[0][0]=1;應該讓ptrallunits[0][1].holding[0]

編輯:此代碼的點:
這是所有的一場比賽。 allunits是單位的向量,並且selectedunits商店哪些單位被選中。它們是二維的,因爲它們都被組織成[player] [index]。 allunits[0]擁有第一位玩家的單位,依此類推。

將指針傳遞給構造函數,以便在特定條件下將文本顯示在屏幕上。要打印的文本是關於所選單元的信息,並且包括指針指向的任何數字。一個不同的對象會打印不同的數據,因此是指針。

+4

我確定有更好的方法來做你正在做的事情。 – 0x499602D2

+0

嘗試重新構建添加更多域特定信息和更少代碼的問題。我同意戴維的觀點,你很可能是以不理想的方式做到這一點。 – bobah

+0

不是聽起來像一個白癡,但你是什麼意思'域特定信息'? – drowdemon

回答

0

使用函數或類。如果您使用的是C++ 11,請在本地創建綁定到向量的lambda表達式。否則,創建一個將矢量作爲const by-reference參數的函數,或將矢量移動到它們自己的類中,並將訪問器代碼放入成員函數中。

+0

問題是,我不想爲每個想顯示的變量創建一個新的函數,因爲它有點乏味。有沒有辦法讓一個通用的函數,它可以適用於任何以某種方式傳入的變量,或避免函數?我不在C++ 11中,所以lambda的不在了。 – drowdemon

+0

你有多少變數?爲什麼你不能使用函數參數? – Lucretiel

+0

這個論點會是什麼?我無法傳遞我想要的值,因爲那將是最初的功能障礙指針。 – drowdemon