Первая вещь, которую вы могли бы попробовать, это опубликовать свой код, чтобы мы могли его увидеть: -)
Однако ошибка syntax error: missing ';' before ...
почти всегда появляется потому что у вас неизвестный тип, согласно следующему:
int main() {
NOTYPE *x;
return 0;
}
Поскольку вы перемещаете прототипы функций в заголовок, может быть, что они используют типы, которые все еще существуют в файле C. Эти объявления типов должны существовать перед использованием, иначе вы получите эту ошибку.
Это (прототипы функций с неизвестными типами) не является причиной только ошибки, а Я почти могу гарантировать, что это будет аналогичная проблема, попробовав использовать еще не объявленный тип.
Согласно другой информации, размещенной здесь, вы также можете получить эту проблему с циклическими зависимостями, например:
typedef struct { TWO *two; } ONE; // don't know anything about TWO here.
typedef struct { ONE *one; } TWO;
Если бы зависимость была только один , тогда вы могли бы просто убедитесь, что порядок двух определений был правильным. С зависимостью круговой вы должны ввести неполное определение (на самом деле декларацию), чтобы она работала:
typedef struct TWO; // declare that TWO exists.
typedef struct { TWO *two; } ONE; // define ONE, we know TWO exists.
typedef struct { ONE *one; } TWO; // define ONE, we know all about ONE.
Обратите внимание, что это работает, только если вы объявляете указатель на неполный тип, вы не сможете сделать:
typedef struct TWO;
typedef struct { TWO two; } ONE;
, потому что для определения ONE
требуется полный тип.