今天分享一个很奇怪的问题,为什么说奇怪,因为今天分享的这个错误是我在移植代码时候遇到的,在其他人的工程中可以正常运行,而我自己的就运行报错,于是来给大家分享一下,说不定有小伙伴知道呢~

错误问题

首先,我是在移植关于硬件IIC驱动EEPROM的工程时候,发现下面这部分代码在自己的工程里面会提示出错:

//file.h---start
#define EEPROM_ADDRESS_0 0xA0
//flie.h----endu16 EN_ADDRESS;
#ifdef EEPROM_ADDRESS_0/* 选择 EEPROM Block0 来写入 */EN_ADDRESS = EEPROM_ADDRESS_0;
#endif

我看了一下好像没毛病,而且这代码在移植项目的那个工程里面是完全正常运行的,为什么移植到了我自己的工程就出错了。

其编译后提示的错误为:error: #147: declaration is incompatible with “u16 EN_ADDRESS” (declared at line 3) -----------------翻译过来是指不兼容的意思

并且还提示我了一个告警:warning: #77-D: this declaration has no storage class or type specifier
(警告:#77-D:此声明没有存储类或类型说明符)

于是我有查了一下网上,有些说把什么选项勾掉,有些说可能是宏多次定义,可能这些问题真的帮他忙解决了,但是却没有解决我的问题。

解决方法:

于是我自己在从提示问题上面和编译器改为定义的位置看,终于我从“警告:#77-D:此声明没有存储类或类型说明符”上面找到了一些源头,于是我想到把那个代码这样修改:

//file.h---start
#define EEPROM_ADDRESS_0 0xA0
//flie.h----end//u16 EN_ADDRESS;  /* 去掉这个定义 */
#ifdef EEPROM_ADDRESS_0/* 选择 EEPROM Block0 来写入 */u16 EN_ADDRESS = EEPROM_ADDRESS_0;     //直接在条件编译里面定义并赋值
#endif

然后修改后重新编译,发现竟然不报错和不告警了,奇怪了为什么在移植工程里面却可以那样,而我工程里面要这样。

因此,我想到可能是在预编译也就是条件编译的中间定义的变量是需要类型说明符的,也就是必须定义。

#ifdef xxx
//中间的必须是要定义的
#endif

所以之前我前面加了这一句,导致了存在多次定义,也印证了那个告警提示:警告:#77-D:此声明没有存储类或类型说明符,现在这么一看是不是觉得这个告警很到点子上。

u16 EN_ADDRESS;

因此,如果有其他小伙伴遇到我这样的情况,可以参考我的修改方式进行修改~

另外下次使用预编译时候如果里面用到了什么变量,还是要在里面定义比较好。

本人水平有限,上述信息仅供参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~

解决“error #147 declaration is incompatible with xxx xxx (declared at line xx)”问题相关推荐

  1. C编译问题: declaration is incompatible with previous FuncName (declared at line XXX)

    C,编译遇到问题declaration is incompatible with previous "FuncName" (declared at line XXX), 将被调函数 ...

  2. IAR编译出现Error[Pe147]: declaration is incompatible with “__interwork __vfp int dir_get_dout()“ 报错

    IAR编译出现Error[Pe147]: declaration is incompatible with "__interwork __vfp int dir_get_dout()&quo ...

  3. 如何解决error: failed to push some refs to ‘xxx(远程库)‘

    当push代码时,出现如下错误: jinshu@DESKTOP-L5OTKGN MINGW32 /c/jinshu/develop/projects/freamwork (faceIdentify) ...

  4. mysql修改密码Linux 解决 ERROR 1045 (28000): Access denied for user ‘xxx‘@‘localhost‘ (using password: Yes)

    问题描述: 用root用户创建了一个用户(lisi)给他赋予权限之后 切换用户的时候就发生了一下的错误: mysql -u lisi -p Enter password ERROR 1045 (280 ...

  5. git解决error: failed to push some refs to ‘xxx(远程库)‘

    在使用git 对源代码进行push到gitHub时可能会出错,信息如下: 此时很多人会尝试下面的命令把当前分支代码上传到master分支上. $ git push -u origin master 但 ...

  6. Qt之解决error: member access into incomplete type ‘UI::XXX‘

    解决方案:重新编译后关闭当前项目文件,重新打开项目即可消除该错误提示

  7. IAR STM32报错Error[Pe147]:declaration is incompatible with“__nounwind __interwork __softfp unsigned

    IAR STM32工程中报错: Error[Pe147]: declaration is incompatible with "__nounwind __interwork __softfp ...

  8. 【STM32】#147-D: declaration is incompatible 类错误的解决方式

    declaration is incompatible ,定义不兼容的意思 最基本的错误就是定义和声明的时候在参数里出现了数据格式,参数数量或形参名字的不一致导致的 但是很多情况下不是这个问题导致的, ...

  9. 【错误笔记】error: expected declaration specifiers or '...' before XXX

    今天由于头文件的一通包含操作,导致了一个比较头疼的问题. 找了好长时间,最后删了几个头文件,才编译通过. 当 A 包含 B 的头文件,B 又包含 A 的头文件,就出现了这个神奇的 error. 错误提 ...

最新文章

  1. 转 -- 推荐几本云计算的经典书籍
  2. visual studio 调试python_Visual Studio Code Python 调试设置
  3. SmartFox中的類型轉換
  4. python人工智能是什么意思_Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现...
  5. 耦合式是什么意思_定向耦合器是如何工作的?能怎样应用?看完就全明白了
  6. javascript计时秒表简单设计
  7. python实现文件传输_Python实现基于HTTP文件传输实例
  8. django 按钮的样式_Python学习第五十六天记录打call:Django视图
  9. [转载] Python3入门精通基础教程(合集)
  10. 1.mongoDB 简介
  11. 计算机应用怎么写,计算机应用专业描述怎么写
  12. 电工基础知识入门必背的知识
  13. UCF101数据集处理
  14. VirtualBox安装Windows XP——图解
  15. FME 坐标系使用(二)----关于Beijing54坐标系和Xian80坐标系说明的补充
  16. 淘宝商品爬虫实战笔记
  17. 远程工具TeamViewer
  18. [云原生专题-45]:Kubesphere云治理-基于Kubernetes 构建的企业级容器平台简介与总体架构
  19. 开篇词 | 程序员的成长课
  20. 肺炎期间,送上一份家庭健身计划

热门文章

  1. linux中 nginx 访问html正常 访问php报错
  2. Carsim中设置车辆的初始位置及航向角
  3. MetaCRM项目组招聘公告,深圳/西安新成立1500+人研发中心
  4. Android:视图绘制(六) ------Paint进阶之ColorMatrix(一)
  5. 洞察数字城市——监控易雪亮工程智慧运维
  6. 数据库选课系统mysql_学生选课系统数据库的设计与实现
  7. HPCC性能测试benchmark
  8. oracle cdr是什么,CorelDRAW2017新增哪些功能?
  9. 让嵌入式播放器可以自动下载歌词
  10. 话说OpenCL(一)