2013-05-02 4 views
1

У меня довольно сложная проблема с структурой данных, которую я не могу понять. Для моего назначения у меня должен быть динамически выделенный массив структур в моем частном разделе моего заголовка. Таким образом, до этого момента, в моем файле заголовка, у меня естьИнициализация массива указателей в C++

struct node{ 
    int name; 
    node *next;}; 

В моей личной, у меня есть

node *adj; 

, который, по крайней мере, насколько мне известно, как бы вы создали, имеющий массив.
Затем, в моем файле .cpp, у меня есть

adj = new node*[]; 

Это бросает кучу ошибок. Но, когда у меня есть

node *adj[n]; 

в моей cpp и ничего в моем заголовке, это работает. Мои вопросы: как мне получить массив в моем частном разделе моего заголовка, но динамически выделять пространство в моем .cpp?

+0

'node * adj;' не является массивом указателей, это указатель на 'node'. 'node ** adg' будет массивом указателей. –

+0

@EdS. Название говорит массив указателей, текст говорит массив структур. Подумав об этом, я думаю, что массив указателей - это то, что действительно требуется. – john

+0

@john: Да, я ушел от этого: 'adj = новый узел * [];' –

ответ

2

Вы определили

node *adj; 

который является указателем на узел, или массив узлов. Если вы хотите, массив указателей на узлы, вы должны объявить

node **adj; 

который является указателем на указатель на узел, или массив указателей на узлы. В первом случае вы назначаете массив, используя

adj = new node[n]; 

, который определяет массив узлов. а во втором вы используете

adj = new node*[n]; 

, который определяет массив указателей узлов.

adj = new node*[]; 

не должен иметь смысла, поскольку он не сообщает компилятору, насколько велика величина массива.

+0

Это именно то, что мне нужно. Вторая версия отлично работала. – marcinx27