2013-11-08 2 views
0

Итак, я пытаюсь написать обобщенную реализацию единого списка, которая работает со всеми типами, и продолжать сталкиваться с ошибкой: Assignment from incompatible pointer type для строки кода, которая является следующим образом:Ошибка: присвоение несовместимого типа указателя в связанном списке

node->next = newNode; 

Это в контексте следующих деклараций и структур:

typedef struct{ 
    void* data; // The generic pointer to the data in the node. 
    Node* next; // A pointer to the next Node in the list. 
} Node; 

void insertAfter(Node* node, Node* newNode){ 
    // We first want to reassign the target of node to newNode 
    newNode->next = node->next; 
    // Then assign the target of node to point to newNode 
    node->next = newNode; 
} 

Я пытался использовать оба так: node->next = *newNode; и это: node->next = &newNode; Но, как вы можете себе представить, что они делают не работаю, что я делаю ng неправильно здесь, что и почему возникает эта ошибка и как ее исправить?

+0

Какой у вас компилятор? –

+0

Выделенное структурированное определение не поддается компиляции. Вы не можете ссылаться на еще не определенный тип 'Node' внутри определения typedef-struct для типа' Node'. Это немедленно вызовет ошибку компиляции. Либо у вас есть другое определение для какого-либо другого типа «Node» где-то, либо код, который вы отправили, не является компилированным вами кодом. И если у вас действительно был другой тип «Node», объявленный где-то, вы обычно получаете ошибку компиляции для переопределения типа. Итак, я бы предположил, что код, который вы опубликовали, является неточным. – AnT

ответ

1

Изменить определение вашей структуры из

typedef struct{ 
    void* data; // The generic pointer to the data in the node. 
    Node* next; // A pointer to the next Node in the list. 
} Node; 

в

typedef struct Node Node; 
struct Node { 
    void* data; // The generic pointer to the data in the node. 
    Node* next; // A pointer to the next Node in the list. 
}; 

Причина в том, что вы не можете ссылаться на ЬурейеЕ внутри структуры, пока ЬурейеЕ не будет завершена.

Не знаете, почему вы считали, что другая проблема была проблемой. Не было.

+0

Ну, правда, «вы не можете ссылаться на typedef внутри вашей структуры до тех пор, пока typedef не будет завершен». Но OP сообщает совершенно другую ошибку, которая предполагает, что его определение typedef/struct действительно компилируется (!). Что-то здесь не так. – AnT