Tout d'abord, le code:
// ...
struct node_list {
node_list *prev;
node *target; // node is defined elsewhere in the application
node_list *next;
};
node_list nl_head;
int main() {
nl_head->prev = &nl_head;
// ...
return 0;
}
Je reçois une erreur:
make (in directory: #####)
g++ -Wall -std=c++11 -o main main.cc
main.cc: In function ‘int main(int, char**)’:
main.cc:38:9: error: base operand of ‘->’ has non-pointer type ‘node_list’
nl_head->prev = &nl_head;
^
Makefile:8: recipe for target 'main' failed
make: *** [main] Error 1
Compilation failed.
Autant que je sache, ma syntaxe est correcte. Quelqu'un peut-il signaler l'erreur?
Avant que quiconque ne le signale comme doublon, je suis conscient qu'il est similaire à quelques autres questions, mais aucune de leurs solutions ne semble fonctionner pour moi. À moins que je ne me trompe, ce qui, je l'admets, est possible, mais c'est pourquoi je suis ici.
nl_head
n'est pas un pointeur. essayez nl_head.prev
Comme le suggère le message d'erreur et le titre de votre question. nl_head
n'est pas un pointeur, vous ne pouvez donc pas utiliser le ->
opérateur.
Faites-en un pointeur. Vous devrez également allouer de la mémoire avant de pouvoir l'utiliser.
Alternativement, vous pouvez pas en faire un pointeur mais utiliser à la place l'opérateur point pour accéder à son membre.