"->"的基本操作数具有非指针类型

base operand of ‘->’ has non-pointer type

本文关键字:类型 指针 操作数 gt      更新时间:2023-10-16

首先,代码:

// ...
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;
    }

我得到一个错误:

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.

据我所知,我的语法是正确的。有人能指出错误吗?

在有人将其标记为重复之前,我知道这与其他几个问题类似,但他们的解决方案似乎都不适合我。除非我做错了,我承认这是可能的,但这就是我来这里的原因。

nl_head不是指针。尝试nl_head.prev

如错误消息和问题标题所示。nl_head不是指针,因此不能使用-­>运算符。

把它做成一个指针。你还需要分配内存,然后才能使用它

或者,您可以而不是使其成为指针,而是使用点运算符来访问其成员。

nl_headnode_list结构的对象,它不是指针,因此使用点运算符并分配loa:

nl_head.prev = &nl_head;