2013-10-28 53 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];'。 –