2014-01-12 55 views
0

所以這是我的功能。我試圖在一個結構內動態地創建一個數組。

void Array::addValueStruct(int id, int size, int type, int compareValue, StoredData temp[]) 
{ 
    //struct 
    StoredData* tempStruct = new StoredData [arrSize+1]; 
    for (int i=0;i<arrSize;i++) 
    { 
     tempStruct[i] = temp[i]; 
    } 

    arrSize = arrSize + 1; 

    delete [] temp; 

    temp = tempStruct; 

    temp[arrSize-1]={id,size,type,compareValue}; 
} 

這裏就是我初始化我的結構

StoredData testData[5]={{0,50,5,1},{1,25,5,2},{2,40,2,3},{3,10,5,4},{4,80,3,5}}; 

現在的我,約20%肯定它爲什麼不工作的原因是因爲我需要使用新的功能來創建數據,但我試圖在網上搜索,我找不到任何東西來幫助我。

我希望發生什麼,是我想通過函數傳遞結構數組由1

+0

你究竟想要做什麼?你如何測試'addValueStruct'? – user35443

+0

我希望能夠通過該函數傳遞結構,並且我希望該函數能夠將結構數組的大小增加1. – WorldsWorstProgrammer

+0

「它不工作」<---世界上最糟糕的問題規範 –

回答

0

這裏有幾個問題,以增加其大小。其中之一是你懷疑的,你不能delete靜態定義的東西。通過執行靜態定義和初始化函數來執行動態分配並複製靜態數據,可以解決該問題。

另一個問題是您正在使用temp變量上的值調用。這可能不是很明顯,因爲如您所知,您可以修改數據temp指向 - 問題是您還想執行temp = tempStruct;其中,大概您想影響傳遞值的調用者視圖如果你想影響呼叫者看到的內容,你需要通過引用來調用。

+0

究竟該如何做我靜態定義一個結構數組?我可以在任何問題中使用標準數組來完成它,但對於結構體來說,它似乎沒有相同的工作方式。 – WorldsWorstProgrammer

+0

您已經定義了一個靜態的結構數組 - 這就是您當前如何初始化'testData'。我建議將當前的'testData'重命名爲'initialTestData',創建'StoredData * testData = NULL;',並且編寫一個函數將'initialTestData'的內容複製到'testData'中(它將使用'new' )。 – mah

+0

所以這個函數應該簡單地將內容從一個變量拷貝到另一個變量中?新的分配在哪裏進入呢?我對使用新的和刪除相當新。 – WorldsWorstProgrammer

相關問題