C - 错误:预期的标识符或'('之前' void'

时间:2016-04-30 23:41:02

标签: c

我正在学习C,并且正在尝试为练习创建一个ArrayList。当我尝试编译这段代码时,我遇到了很多错误,但我无法弄清楚为什么会这样:

Test.c:12:13:错误:预期的标识符或'(' before' void'  struct init(void);

关于此错误与谷歌关于虚空没有多少,所以任何帮助将不胜感激。谢谢!

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

    struct ArrayList {
    int size;
    int typeSize;
    int index;
    int array[];
};

struct init(void);

void add(struct list, int x);

int get(struct list, int x);


int main() {
   struct ArrayList list = init();
   add(list, 4);
   printf("%d", get(list, 0));
   return 0;
}


struct init(void) {
    ArrayList this;
    this.size = 0;
    this.index = 0;
    return this;
}

void add(struct list, int x) {
    list->array[size] = x;
    size++;
}

int get(struct list, int index) {
    return list->array[index];
}

5 个答案:

答案 0 :(得分:4)

struct init(void);

这是语法错误。

给定类型声明struct ArrayList { ... },类型名称为struct ArrayList。如果init应该返回ArrayList结构,则需要将其声明为:

struct ArrayList init(void);

init函数的定义也有错误。这个声明:

ArrayList this;

需要:

struct ArrayList this;

(作为样式点,您可以考虑使用this以外的名称。在C ++中,this是一个关键字,并且您以与其不一致的方式用作标识符C ++含义。这是完全合法的,但它可能会引起一些混淆。我建议将其称为result。)

答案 1 :(得分:2)

缺少结构名称。

struct ArrayList init(void);

struct ArrayList init(void) {
    ArrayList this;
    this.size = 0;
    this.index = 0;
    return this;
}

另一个问题,array在您的情况下未初始化,在addget中使用它是未定义的行为:

struct ArrayList init(void) {
    ArrayList this;
    this.size = 0;
    this.index = 0;
    return this;
}

在这种情况下,灵活数组成员array不与任何存储关联,最好这样做:

struct ArrayList* init(void) {
    ArrayList *this = malloc(sizeof(struct ArrayList) + sizeof(int[NUM]));
    this->size = NUM;
    this->index = 0;
    return this;
}

addget功能也需要修复:

void add(struct ArrayList *list, int x) {
    list->array[list->index++] = x;
}

int get(struct ArrayList *list, int index) {
    return list->array[index];
}

答案 2 :(得分:1)

struct init(void);

struct本身并不是一个足够的类型。你可能想要使用这样的东西:

struct ArrayList init(void);

答案 3 :(得分:0)

struct init(void); - 它看起来像一个没有参数的函数返回struct。但struct是什么?可能是struct ArrayList

struct的其他外观与struct类型的名称相同。

答案 4 :(得分:0)

您的数据类型中有很多错误。 struct不是数据类型。检查一下。我已经改变了你的代码。请记住,如果您要使用指针,至少应该传递地址

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

struct ArrayList {
int size;
int typeSize;
int index;
int *array;
};

struct ArrayList init();

void add(struct ArrayList* list, int x);

int get(struct ArrayList* list, int x);


int main() {
   struct ArrayList list = init();
   add(&list, 4);
   printf("%d", get(&list, 0));
   return 0;
}


struct ArrayList init() {
   struct ArrayList this;
   this.size = 0;
   this.index = 0;
   this.array = (int*)malloc(sizeof(int) * /*numOfelementsToBeInserted*/);
   return this;
}

void add(struct ArrayList *list, int x) {
    list->array[list->size] = x;
    list->size++;
}

int get(struct ArrayList *list, int index) {
    return list->array[index];
 }