【发布时间】:2010-03-12 07:59:53
【问题描述】:
我的代码是
void doc(){
//mycode
return;
}
我的警告是
conflicting types for 'doc'
任何人都可以解决它。
【问题讨论】:
-
你可能在某处又定义了一个
doc,检查你的包含,错误消息应该告诉你冲突声明也在哪里。
我的代码是
void doc(){
//mycode
return;
}
我的警告是
conflicting types for 'doc'
任何人都可以解决它。
【问题讨论】:
doc,检查你的包含,错误消息应该告诉你冲突声明也在哪里。
在 C 中,如果您在调用函数时没有函数原型,则假定它返回 int 并采用未指定数量的参数。然后,当您稍后将函数定义为返回 void 并且不带任何参数时,编译器会将其视为冲突。
根据代码的复杂程度,您可以做一些简单的事情,例如在使用之前移动函数的定义,或者在头文件中添加函数声明并包含它。
无论如何,最终效果应该是在使用函数原型之前使其可用。
如果你添加
void doc(void);
在函数使用之前,您将在范围内看到一个原型,并且您的警告将消失。
我认为这是您发出警告的最可能原因。您的代码中可能有明确的不兼容 doc 声明,但我们无法判断,因为您尚未发布完整的代码。
【讨论】:
尝试在程序文件中的 main 函数之前编写 doc 函数。
【讨论】:
你已经用其他类型/签名声明它并用其他类型/签名定义..
喜欢
int doc();
void doc()
{
}
会给你这个警告。
【讨论】:
这显然不是你的完整代码。
但是,该错误意味着doc 的另一个声明(可能是全局变量?头文件中的某些东西?)不是不带参数的void 函数。
【讨论】:
"doc" 可能已经用不同的类型声明了... 你应该试着找到之前的声明!
【讨论】:
您之前已经声明了doc,或者调用了未声明的doc,从而迫使编译器从该调用中推断出doc 的可能参数声明。现在,您引用的 doc 的定义与之前的声明不同(显式的或由编译器推导出的),这被报告为“冲突”。
【讨论】:
确保您没有在代码中的任何地方使用过 doc!, 我认为这只会给你带来麻烦!
【讨论】:
在用法上方声明函数为我解决了这个问题。
例子:
void recordAudio(){ //declaration
doStuff();
}
void initialise(){
recordAudio(); // usage
}
如上所见,recordAudio() 的用法在 where is used 以上。
【讨论】:
这是因为你在调用函数之前没有创建任何函数原型。 所以编译器默认返回类型为 int 。但是在定义函数时,您使用了返回类型为 void,这与编译器假设相冲突。这就是为什么您会收到错误conflicting types for 'doc'
可以通过在main前加一个函数原型来解决
#include <stdio.h>
void doc();
int main()
{
doc();
}
void doc()
{
//mycode
return;
}
【讨论】: