错误:取消引用指向不完整类型的指针。

时间:2013-12-12 22:21:25

标签: c

struct t_Node
{
    Element info;
    struct t_Node* next;
};

当我尝试编译时,我一直收到此错误,是否有任何请求可以解释为什么,以及如何解决? 错误出现在下面的代码中。

Node* createNode(Element e)
{
    Node* node = (Node*) malloc(sizeof(struct t_Node));
    if(node == NULL)
        return NULL;

    (*node)->info = e; // here
    (*node)->next = NULL; // and here
    return node;
};

3 个答案:

答案 0 :(得分:2)

当您尝试将内容编写到编译器不理解的结构中时,会发生该错误。

根据您展示的代码段,您已定义t_node,但您使用createNode中名为Node的结构。

也许你需要添加一个typedef?

struct t_Node
{
    Element info;
    struct t_Node* next;
};
typedef struct t_Node Node;

答案 1 :(得分:1)

假设您忘记在此处写入typedef声明(但您在代码中写了),您的语法中会出现另一个错误。

node->info = e; // here
node->next = NULL; // and here

和这个

(*node).info = e; // here
(*node).next = NULL; // and here

是对的。

x为指针:

x->y becomes (*x).y so it is like you have written (*(*node)).info and (*(*node)).next 
你的代码中的

(这是错误的)。

答案 2 :(得分:0)

你真正的问题在于你正在做以下事情:

(*node)->info = e; // here
(*node)->next = NULL; // and here

它应该是:

(*node).info = e;
(*node).next = NULL;

node->info = e;
node->next = NULL;

您应该看看如何正确使用指针。

另一个问题是您使用的是名为 Node_t 的结构,然后是另一个节点。 但是从你的错误中我敢打赌你已经使用过typedef而没有显示它。