web-dev-qa-db-fra.com

l'opérande de base ‘->’ est de type non pointeur

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.

14
FatalKeystroke

nl_head n'est pas un pointeur. essayez nl_head.prev

11
edtheprogrammerguy

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.

9
ApplePie