Ошибка gcc: два или более типов данных в спецификаторах объявления - PullRequest
4 голосов
/ 24 декабря 2010

GCC говорит мне:

cc -O3 -Wall -pedantic -g -c init.c
init.c:6:1: error: two or more data types in declaration specifiers
init.c: In function 'objinit':
init.c:24:1: warning: control reaches end of non-void function
make: *** [init.o] Error 1

код:

#include "beings.h"
#include "defs.h"
#include "funcs.h"
#include "obj.h"

void objinit(int type, struct object* lstrct){
     switch(type){
             case WALL:
                     lstrct->image = WALL_IMG;
                     lstrct->walk = false;
                     lstrct->price = 0;
             break;
             case WAND:
                     lstrct->image = WAND_IMG;
                     lstrct->walk = true;
                     lstrct->price = 70;
             break;
             case BOOK:
                     lstrct->image = BOOK_IMG;
                     lstrct->walk = true;
                     lstrct->price = 110;
             break;
     }
}

я знаю, что-то вроде WALL_IMG находится в отдельном файле .h, но что не так с моим кодом?

1 Ответ

31 голосов
/ 24 декабря 2010

Мои психические отладочные способности говорят мне, что, вероятно, у вас есть определение структуры в obj.h, которое не заканчивается точкой с запятой.

Неверно:

struct object { /* etc. */ }

Правильно:

struct object { /* etc. */ };

Почему я так думаю? В ошибках сказано:

init.c:6:1: error: two or more data types in declaration specifiers
init.c: In function 'objinit':
init.c:24:1: warning: control reaches end of non-void function

В предупреждении говорится, что компилятор считает, что ваша функция имеет тип возврата не void, но ваша функция явно объявлена ​​с типом возврата void. Ошибка говорит о том, что компилятор считает, что ваша функция объявлена ​​с несколькими типами. Наиболее вероятное объяснение состоит в том, что в obj.h есть определение структуры, которое не определено.

...