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

甚至可以从类中引用非对象吗?如何让我的参考数组更改源数组?我之前将该函数中的引用数组作为非对象,并且一切正常。不,我不能把它留在那里

4

1 回答 1

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而不是手动进行所有内存管理。

于 2013-10-28T23:21:55.367 回答