#c #algorithm #pointers #structure #dijkstra
#c #алгоритм #указатели #структура #dijkstra
Вопрос:
У меня есть программа, которая должна найти кратчайший путь (алгоритм Дейкстры), и я решил использовать массив указателей на структуры, и я продолжаю получать эту ошибку:
В функции
‘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] = amp;(*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(amp;n, i);
}
}
return 0;
}
Что я делаю не так?
Ответ №1:
Ты … пытаюсь присвоить указатель на значение int. Вы не можете этого сделать.
int *pointerArray[20];
необходимо было бы
Node *pointerArray[20];
Однако, когда вы делаете это:
pointerArray[i]=amp;(*n);
вы делаете это:
pointerArray[i] = n;
Это то, что вы имеете в виду делать? Вы говорите, что хотите использовать «массив указателей на структуры». Вы передаете указатель на указатель здесь и пытаетесь сохранить это.
void insertNode(Node *n,int i)
{
pointerArray[i] = n;
}
Будет хранить указатели узлов в массиве.
Ответ №2:
Вы объявили pointerarray
как тип int*[]
. Вы хотите, чтобы это был тип Node*[]
.