error: expected declaration specifiers or '...' before xxx(xxx是函数形参)

Posted cyyljw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了error: expected declaration specifiers or '...' before xxx(xxx是函数形参)相关的知识,希望对你有一定的参考价值。

在使用带参有返回值的函数指针做参数时,编译出现下面情况

……………………

error: expected declaration specifiers or ‘...‘ before ‘FunType‘

 

情形描述:

a.h:

typedef void (*FunType)();

void callFun(FunType p);

 

a.c :

#include "a.h"

FunType myfuntype=NULL;

void callFun(FunType p)

{

  myfuntype=p;

}

b.c

#include "a.h"

MyFun()

{

  .....;

}

callFun(MyFun);

函数指针变量FunTypevar  定义在 a.c 中,a.h声明 了 相应的typedef 和函数 .在b.c 想使用a.c中函数指针,于是在b.h中#include"a.h",最后出现了上面的编译错误。

 

原因分析:

网上搜索,讨论的不少,越看越茫然。

可能原因是

b.h中#include "a.h" 而a.h中的函数声明中用到了b.h中的结构体或者typedef,那么就会出现在包含a.h的时候b.h中的结构体或者typedef还没有声明,从而陷入错误.

解决办法:

将a.h 删除

a.c:

typedef void (*FunType)();

FunType myfuntype=NULL;

void callFun(FunType p)

{

  myfuntype=p;

}

b.c

typedef void (*FunType)();

extern void callFun(FunType p);

MyFun()

{

  .....;

}

callFun(MyFun);

 

当再次make 的时候,pass了

以上是关于error: expected declaration specifiers or '...' before xxx(xxx是函数形参)的主要内容,如果未能解决你的问题,请参考以下文章

laravel --报错:Parse error: syntax error, unexpected '}', expecting ';'

Syntax Error: Unexpected token, expected {

Syntax Error: SassError: Expected newline.错误解决

error: expected `;' before '' token这是啥错误

Parse error: syntax error, unexpected '__data' (T_STRING), expecting ',' or ')&#

syntax error, expect {, actual error, pos 0出错调试