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是函数形参)

原文地址:https://www.cnblogs.com/cyyljw/p/9844240.html

时间: 2024-11-23 18:04:36

error: expected declaration specifiers or '...' before xxx(xxx是函数形参)的相关文章

Error: Expected resource of type xxx [ResourceType]

运行环境:Android Studio 1.4 gradle版本:2.10 工程编译没有问题,并且能在模拟器和真机上正常运行,但是当打包成Apk的时候,出现了 Error:Error: Expected resource of type color [ResourceType]  这个错误,导致打包不成功. 以下是出错地方的代码: private static RadioButton createGroupTabItem(Context context, MemberType data) { R

g++ error: expected nested-name-specifier before 'XXX'

1 template <typename addrT=int,typename valuT=int,typename stream_addrT=bm_addr,typename stream_sizeT=int64> 2 class stream_chip : public chip<addrT,valuT>{ 3 public: 4 typedef typename stream_addrT stream_addr_type; 5 typedef typename stream_

Error Domain=ASIHTTPRequestErrorDomain Code=8 &quot;Failed to move file from&quot;xxx/xxx&quot;to&quot;xxx/xxx&quot;

今天真的好高兴呀 我解决了一个折磨了我一周的问题,真的是激动地要哭出来了,为了这个问题,我嘴也烂了,头发抓了一地啊.虽然解决方法,最后还是展现出了“百度”的伟大,但是我还是很开心,在这里我展示一下我的战果 问题的表面就是在2G下下载zip包失败,不是每次都失败,而是只要我离开当前页面再次进入当前页面就会失败(进入requestFail),如果只是离开不进入,那么一起正常. 多么诡异呀,起初我也想通过看看进入页面后是不是进行了什么卑鄙的操作,而导致ASI罢工,可是最后我放弃了,因为任何有关ASI的

Cocos2d-x 3.0 编译出错 解决 error: expected &amp;#39;;&amp;#39; at end of member declaration

近期把项目移植到cocos2d-x 3.0,在整Android编译环境的时候,出现一大堆的编译出错,都是类似"error: expected ';' at end of member declaration"之类的,看了一些编译错误,都是cocos2d-x库里面的代码出错. 经过分析,怀疑可能是编译环境的问题,由于cocos2d-x使用了非常多C++11的新特性,这有可能导致老的编译器出错,看了一下NDK以下的文件以及toolchains里面的内容,windows编译器默认使用4.6,

NDK开发中出现各种Semantic Error“XXX &#39;xxx&#39; could not be resolved”的解决方法

项目要求NDK开发App程序,于是import了工程项目,搭好了环境,结果出现各种 Type 'xxx' could not be resolved Method 'xxx' could not be resolved 等等Semantic Error.但是工程本身并不存在错误,可以成功编译. 解决方法:明显是没有包含各种头文件造成的,<jni.h>这些头文件包含进工程即可. 右键工程->Properties->C/C++ General->Paths and Symbols

error: two or more data types in declaration specifiers原因及解决方法

编译时报错: [plain] view plaincopyprint? error: <strong>two or more data types in declaration specifiers</strong> error: two or more data types in declaration specifiers 原因可能有两个: 1. 少了一个分号";",比如定义一个结构体时,在最后忘了加分号. 解决方法:加上分号即可. 2. 重复定义,比如:a

ERROR 1045 (28000): Access denied for user &#39;xxx&#39;@&#39;localhost&#39; (using password: YES)【奇葩的bug】

今天周末,在家里学点新技术,虽然公司分配的任务没有完成(滑稽滑稽) 我先创建了一个mysql数据库 然后用root用户创建一个新用户,毕竟项目中使用root是非常危险的,尤其是我这样的实习生(再次滑稽) 再然后愉快的给它赋予了权限,然后切换用户 再再然后,不愉快的事情发生了: ERROR 1045 (28000): Access denied for user 'xxx'@'localhost' (using password: YES) 密码错了? 算了,再敲一遍 fuck,还是错了 可能设密

CodeSign error: no provisioning profile at path &#39;/Users/XXX/Library/MobileDevice/Provisioning Profiles/XXXXXXXX.mobileprovision&#39;

新的Xcode 如果更新了provisioning profile文件之后,编译工程时会出现错误: CodeSign error: no provisioning profile at path '/Users/XXX/Library/MobileDevice/Provisioning Profiles/XXXXXXXX.mobileprovision' 这个时候无论Clean多少遍都是咩用的,解决办法是: 1.找到工程project文件右击显示包内容: 2.在包里找到project.pbxpr

mysql 1130 ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server

mysql -u root -p  mysql;use mysql;  mysql;select 'host' from user where user='root';  mysql;update user set host = '%' where user ='root';  mysql;flush privileges; mysql 1130 ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL se