C数据结构错误

时间:2017-04-14 22:33:55

标签: c pointers struct

我正在创建一个在C中使用基本堆栈的程序。在此我在标题中定义了两个结构:

  1. 名为Node的结构,其中包含字符串和指向前一个节点的指针作为成员。
  2. 一个名为Stack的结构,其指针指向最后一个Node作为成员。

    以下是我头文件中这些结构的定义:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct Node {
     const char* string;
     struct Node *prev;
    };
    
    typedef struct Stack {
     size_t sizeOfStack;
     size_t sizeOfElem;
     struct Node *last;
    };
    
  3. 一个给我错误的方法是CreateStack():

    CreateStack:此函数创建一个堆栈(相当于构造函数)。

    (a)名称:CreateStack

    (b)返回类型:指向堆中分配的堆栈的指针。

    这是我的实施

        Stack* CreateStack() {
            Stack* stack = malloc(sizeof(*stack));
            if (stack == NULL) {
                return NULL;
            }//end of if
            stack->sizeOfElem = 0;
            stack->sizeOfStack = 0;
            stack->last = NULL;
            return stack;
        }//end of CreateStack
    

    但是编译器正在吐出这个:

    错误:'Stack {aka struct Stack}'没有名为'last'的成员   stack-&gt; last = node;

    错误:'Stack {aka struct Stack}'没有名为'last'的成员   node-&gt; prev = stack-&gt; last;

    错误:'Stack {aka struct Stack}'没有名为'last'的成员  Node * node = stack-&gt; last;

    如果有人可以在这里指出这个问题我会非常感激。我很困惑为什么它说最后不是一个东西,但在其他结构中以同样方式定义的prev不会引发一个标志。感谢。

2 个答案:

答案 0 :(得分:1)

您的typedef语句不完整,因为您没有为该类型定义名称。写下以下内容。

typedef struct Stack {
    size_t sizeOfStack;
    size_t sizeOfElem;
    struct Node *last;
}Stack;

请注意最后的Stack,其中现在定义的类型Stack等同于struct Stack

答案 1 :(得分:1)

修复typedef并编译:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
 const char* string;
 struct Node *prev;
} Node ;

typedef struct Stack {
 size_t sizeOfStack;
 size_t sizeOfElem;
 struct Node *last;
} Stack;

Stack* CreateStack() {
    Stack* stack = malloc(sizeof(*stack));
    if (stack == NULL) {
        return NULL;
    }//end of if
    stack->sizeOfElem = 0;
    stack->sizeOfStack = 0;
    stack->last = NULL;
    return stack;
}//end of CreateStack