0

我在 C 中使用结构时遇到了问题,我有这个代码。

更正说明 我的代码上有一个分号,对不起我的错

我的头文件.h

  struct node{
    Token elem;
    void (*push)(Stack[], Token);
    Token (*pop)(Stack[]);
    Token (*peek)(Stack[]);
    boolean (*isEmpty)(Stack[]);
    boolean (*isFull)(Stack[]);
};

typedef struct node Stack;

我的主程序

# include <stdio.h>
# include "codes/myHeader.h" <-- im using tc2 by the way so im forced to use this kind of inlcude

some codes..

当我尝试编译它时,我在 MyHeader.h 部分出现错误(假设 .c 的另一部分正在工作)它说有一个未定义的错误“节点”,我真的不知道发生了什么,一直尝试将 typedef struct node MyStructure 移动到 struct node { } 定义下方仍然会出现相同的错误

顺便说一句,我正在使用 tc2

有人关心指出我缺少什么吗?

4

3 回答 3

3
typedef struct node {
   int x;
   int y;
} MyStructure;

如同:

struct node {
   int x;
   int y;
};

typedef struct node MyStructure;

堆栈实现示例

//definitions
//C99 has #include <stdbool.h> for this
typedef short boolean;
#define true  1
#define false 0

//You may #define YOUR_APIENTRY APIENTRY (from a system header)
#define YOUR_APIENTRY
#define YOUR_APIENTRYP YOUR_APIENTRY*

//predeclarations
struct _Stack;
typedef struct _Stack Stack;

struct _StackImpl;
typedef struct _StackImpl StackImpl;

struct _Element;
typedef struct _Element Element;

//stack implementation function type definitions
typedef void    (YOUR_APIENTRYP pfnPush)     (Stack*, Element);
typedef Element (YOUR_APIENTRYP pfnPop)      (Stack*);
typedef Element (YOUR_APIENTRYP pfnPeek)     (Stack*);
typedef boolean (YOUR_APIENTRYP pfnIsEmpty)  (Stack*);
typedef boolean (YOUR_APIENTRYP pfnIsFull)   (Stack*);

//funct ptr table
struct _StackImpl{
    pfnPush     push;
    pfnPop      pop;
    pfnPeek     peek;
    pfnIsEmpty  isEmpty;
    pfnIsFull   isFull;
};

//stack
typedef struct _Stack{
    Element* elems; //any appropriate container
    size_t elemCount;
    //if you want to replace the implementation using
    //different func tables (polymorphic)
    //StackImpl* funcPtrs; 
} Stack;

//stack element
struct _Element{
    int value;
};

//default implementation /replace NULL's with actual function pointers)
StackImpl defaultStackImpl = 
{
    NULL,
    NULL,
    NULL,
    NULL,
    NULL
};

//function wrappers
void push(Stack* stack, Element elem)
{
    //if you use a polymorphic implementation
    //stack->funcPtrs->push(stack,elem);
    defaultStackImpl.push(stack,elem);
}
于 2013-01-08T14:40:35.067 回答
1

如果您尝试使用名为 的裸类型node,那是不对的。不存在这种类型。您需要使用:

struct node my_node;

或使用typedef

MyStructure my_node;
于 2013-01-08T14:40:02.940 回答
0

您需要在结构的最后一个 } 之后添加一个分号。

于 2013-01-08T14:40:15.997 回答