在C中'被宣布为一个函数'

时间:2014-04-27 21:32:16

标签: c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LIMIT 100

/* Stack structure */
typedef struct stack
{
  char x[LIMIT][10];
  int top;
  void push(char *s);
  char *pop();
  void init();
  bool is_empty();
} stack;


/* Reset stack's top */
void stack init()
{
  this->top = 0;
}

代码继续但它给出了错误:

main.c|14|error: field 'init' declared as a function|

有什么问题?我从昨天起就无法弄明白。请帮帮我。

2 个答案:

答案 0 :(得分:7)

C中的结构不能具有功能。但是,他们可以指出功能 您需要重新定义struct stack

没有函数或指针的示例

struct stack {
    char x[LIMIT][10];
    int top;
};

void push(struct stack *self, char *s);
char *pop(struct stack *self);
void init(struct stack *self);
bool is_empty(struct stack *self);

带有函数指针的示例

struct stack {
    char x[LIMIT][10];
    int top;
    void (*push)(struct stack *, char *);
    char *(*pop)(struct stack *self);
    void (*init)(struct stack *self);
    bool (*is_empty)(struct stack *self);
};

struct stack object;
object.push = push_function; // function defined elsewhere
object.pop = pop_function;   // function defined elsewhere
// ...

答案 1 :(得分:2)

C不能保存结构内的函数。但是,您可以放置​​一个函数指针。

void (*init)();