我正在创建一个在C中使用基本堆栈的程序。在此我在标题中定义了两个结构:
一个名为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;
};
一个给我错误的方法是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不会引发一个标志。感谢。
答案 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