【问题标题】:Error 98:Conflict with previous definition of x for attribute 'type'错误 98:与属性“类型”的 x 先前定义冲突
【发布时间】:2015-01-28 10:13:11
【问题描述】:

我在使用 SDCC 并对旧的 8051 进行编程时遇到此编译错误。 我正在尝试使 1wire 搜索命令起作用。我得到了一个 OneWire 库,我开始为我的硬件/软件进行修改,现在我陷入了这个错误:

C:\sdcc\code>sdcc test3.c
test3.c:164: error 98: conflict with previous definition of 'OW_search' for  attribute 'type'
from type 'int function ( struct OW_info generic* fixed, unsigned-char fixed) fixed'
to type 'int function ( struct OW_info generic* fixed, unsigned-char fixed) fixed'

出现错误的行如下。

183:...
184:int OW_search(struct OW_info *info)
185:{
186:unsigned char *buffer;
187:int id_bit_number;
188 ...

以防万一,OW_info的声明

struct OW_info
{
unsigned char family;
unsigned char serialNum[6];
unsigned char crc;

};

我正在对上面的函数进行原型设计

int OW_search(struct OW_info *info);

我找不到出现该编译错误的正确原因。我希望得到一些提示,为什么它会出现在那里。谢谢。

还有一个下载我的完整代码的链接http://www.upload.ee/files/4489287/test3.txt.html

【问题讨论】:

  • 您的struct OW_info 定义到底在哪里?在第 5 行的某个地方?
  • 更像101,不在main里面。
  • 正确。我很担心印刷品previous definition of 'OW 中的'OW 部分。你能确保没有错别字吗?
  • @SouravGhosh 对不起,我删掉了一些错误。它现在完全在那里。
  • 我的疯狂刺探黑暗建议是将struct OW_info 的定义从原型之后移到它之前......也许编译器(可能不正确)看到“指向-尚未定义的结构”与“指向已定义结构的指针”不同?

标签: c struct 8051 sdcc


【解决方案1】:

我收到错误是因为我在对函数进行原型设计后声明了结构。 感谢@TripeHound,现在我们知道必须在对函数进行原型设计之前声明结构,经过进一步研究,似乎没有其他方法。

【讨论】:

  • 您的意思可能是定义,而不是声明。你可以通过 typedef-ing 结构声明来绕过它,将 typedef 放在函数之前并在原型中使用它,就像这样:typedef struct OW_info OW_info; /* ... */ int OW_search(OW_info *info); /* ...and after that come the struct definition and then the function body... */ 应该可以工作。
  • 注意:这一切都是因为编译器将函数原型中的struct 和实际的struct 视为两个不同的结构,因为它们属于不同的作用域。这是完全标准化的行为。
  • 是的,作为一个在昨天之前从未使用过结构的人,这是一个真正的思维导图,因为我以前不知道我必须定义(?)结构。感谢您使其更加清晰。
  • 这也可能对您有所帮助:stackoverflow.com/questions/1410563/… =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多