【问题标题】:base operand of ‘->’ has non-pointer type‘->’ 的基操作数具有非指针类型
【发布时间】:2021-05-20 00:43:51
【问题描述】:

一、代码:

// ...

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.

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

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

【问题讨论】:

    标签: c++ pointers g++


    【解决方案1】:

    nl_head 不是指针。试试nl_head.prev

    【讨论】:

    • 我认为它必须是 '->' 因为 'prev' 是一个指针。虽然这确实解决了它,但我显然错了。谢谢:-)
    【解决方案2】:

    正如错误消息和您的问题标题所建议的那样。 nl_head 不是指针,因此您不能使用 -­> 运算符。

    使它成为一个指针。您还需要先分配内存才能使用它。

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

    【讨论】:

      【解决方案3】:

      nl_headnode_list结构的对象,它不是指针,所以使用点运算符并赋值:

      nl_head.prev = &nl_head;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多