2013-10-28 51 views
0

非對象數組比方說,我的功能都排列在它通過這樣的:的借鑑意義

int someFunction (SomeClass * const * array, int arr_size) { } 

這是一些結構的陣列:

struct SomeStruct { 
    int value; 
    int value2; 
}; 

什麼我想實現正在該對象中聲明的對象內引用:

int someFunction (SomeStruct * const * array, int arr_size) 
{ 
    NewClass newclass (array, arr_size); 
} 

我的構造函數如下所示:

Newclass::NewClass(SomeStruct * const * array, int arr_size) 
{ 
    SomeStruct ** myReference = new SomeStruct * [arr_size]; 
    for (int i = 0; i < arr_size; ++i) 
    { 
     myReference[i] = array[i]; 
    } 

    myReference[0] -> value = 10; 
} 

現在,如果我想打印出數組中第一個元素的值,我只能得到零。

int someFunction (SomeStruct * const * array, int arr_size) 
{ 
    NewClass newclass (array, arr_size); 

    cout << array[0] -> value << endl; 
} 

輸出:

0 

它甚至有可能從類指非對象?我如何讓我的參考數組更改源數組?我曾在該函數中的引用數組作爲非對象之前,一切正常。不,我不能只是離開它

+0

沒有[SSCCE](http://sscce.org/),沒有特別的問題(我做錯了什麼)太寬泛/不清楚)。編輯!! –

+0

@ g-makulik不知道什麼是我的問題不清楚。儘管編輯它。 – Saraph

+1

我不知道你真的想做什麼。爲什麼創建'NewClass'只改變'array'中的值?但是你的'NewClass'構造函數沒有做你認爲它的做法,'* const *'是什麼? – crashmstr

回答

0

當您在Newclass::NewClass()中分配結構指針時,您忘記了實際初始化這些指針以指向實際結構。

您需要:

Newclass::NewClass(SomeStruct* const* array, int arr_size) 
{ 
    SomeStruct** myReference = new SomeStruct*[arr_size]; 
    for (int i = 0; i < arr_size; ++i) { 
     myReference[i] = array[i]; 
    } 
    myReference[0]->value = 10; 
} 

雖然我必須說,我感到困惑的所有間接指針,以及爲什麼需要它。而且你也在泄漏記憶。你永遠不會delete[] myReference

而且您應該考慮使用std::vector而不是手動執行所有內存管理。

+0

'myReference [i] =&array [i];'由於從** const **轉換爲非const而不可能。在課堂之外,即使沒有'&也可以工作。 – Saraph

+0

然後適當地聲明'myReference'。答案實際上表明瞭你遇到的真正問題。 –

+0

@Saraph哎呀,這其實是我的錯。答案已更新。由於'array'參數是一個指向指針的指針,所有你需要的是'myReference [i] = array [i];'。 –