C ++ массив указателей на структуры - PullRequest
3 голосов
/ 01 мая 2011

У меня есть программа, которая должна найти кратчайший путь (алгоритм Дейкстры), и я решил использовать массив указателей на структуры, и я продолжаю получать эту ошибку:

В функции‘void insertNode(Node**, int)’:TDA.cpp: 14: ошибка: невозможно преобразовать ‘Node**’ в ‘int*’ при назначении

Вот мой код:

struct Node{int distance, newDistance;};
int *pointerArray[20];

void insertNode(Node **n, int i)
{
    pointerArray[i] = &(*n);
}

Node *createNode(int localDistance)
{
    Node *newNode;
    newNode = new Node;
    newNode->distance = localDistance;
    newNode->newDistance = 0;

    return newNode;
}

int main()
{
    Node *n;
    int random_dist = 0;
    int i;

    for(i=0; i<20; i++)
    {
        if (i==0)
        {
            n = createNode(0);
            cout << n->distance << " distance " << i << endl;
        }
        else
        {
            random_dist = rand()%20 + 1;
            n = createNode(random_dist);
            cout << n->distance << " distance " << i << endl;
            insertNode(&n, i);
        }
    }
    return 0;
}

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

Вы ... пытаетесь присвоить указатель на int. Вы не можете сделать это.

int *pointerArray[20];

должно быть

Node *pointerArray[20];

Однако, когда вы делаете это:

pointerArray[i]=&(*n);

вы делаете это:

pointerArray[i] = n;

Это то, что вы хотите делать? Вы говорите, что хотите использовать «массив указателей на структуры». Вы передаете указатель на указатель и пытаетесь сохранить его.

void insertNode(Node *n,int i)
{
    pointerArray[i] = n;
}

Будет хранить указатели узлов в массиве.

1 голос
/ 01 мая 2011

Вы объявили pointerarray как тип int*[].Вы хотите, чтобы это было типа Node*[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...