我遇到了以下代码,作为C初学者,我来到这里寻求帮助。
此功能来自队列的实施。
Bool queuePut(Queue *q, char c)
{
void beep();
if (queueFull(q))
{
beep();
return false;
}
//do stuff
return true;
}
所以,我在void beep()上遇到gcc的奇怪错误。有人可以解释一下这是什么,在函数内声明一个函数。或者是无效的蜂鸣声()只是不合适?我得到了这个代码,并且总是有可能它不正确。
编辑:我得到的错误:
c:/djgpp/tmp/src/ccrjtmBh.o:queue.c:(.text+0x50): undefined reference to
'_beep'
collect 2: ld returned 1 exit status.
这是链接错误吗?
答案 0 :(得分:4)
很可能您遇到了链接错误,因为:
void beep();
是必须在别处定义的函数的原型。在C中,你不能定义另一个中的函数。请详细说明你得到的错误。
答案 1 :(得分:3)
这是不寻常但合法的。如果在其他地方没有定义实际beep()
,则您看到的错误可能来自链接器。你能发布你收到的实际错误吗?
答案 2 :(得分:1)
正如其他人已经注意到这里发生的事情是你的函数声明了一个名为“beep”的函数的原型。解决此问题的方法是确保编辑或链接中包含函数蜂鸣声。
第一步是确保您正在编译收到的所有文件并链接所有受支持的.lib
如果这不起作用,您可以自己添加方法;)
void beep() {
printf ("beep\n");
}