【发布时间】:2013-07-16 17:05:54
【问题描述】:
我是 C 新手,我已经阅读了许多试图处理这个问题的帖子,他们都说错误消息:
error: conflicting types for 'x'
发生是因为在声明之前使用了函数。这不是(至少不是以明显的方式)我的代码的情况。
我的项目中有几个文件:
minty.clexer.clexer.hminty_util.cminty_util.h
我将lexer.c 和minty_util.c 编译为:
gcc -Wall -g -c lexer.c -o lexer.o
gcc -Wall -g -c minty_util.c -o minty_util.o
这些都编译成功。当我尝试编译minty.c时出现错误:
gcc -Wall -g minty.c lexer.o minty_util.o -o minty
此时,对于在minty_util.h 中声明并在minty_util.c 中定义的函数,我得到了大约 6 个上述形式的错误(其中x 是函数名称)。根据我的阅读,它可能与每个文件#includes 其他文件的方式有关,所以这里是每个文件的包含(省略了stdio.h 等明显的东西):
-
minty.c包括minty_util.h和lexer.h -
lexer.c包括lexer.h -
lexer.h包括minty_util.h(因为它包含使用在minty_util.h中指定的 typedef 的前向声明) -
minty_util.c包括minty_util.h -
minty_util.h不包含任何内容
如果有人能解释我为什么会遇到这个问题,我将不胜感激,因为我已经尝试了几个小时来解决这个问题(应该早点发布!)。
【问题讨论】:
-
您是否在包含的文件中添加了
#ifndef检查? -
欢迎来到 Stack Overflow。请尽快阅读About 页面。该消息通常意味着“x”有两个声明,但“x”的类型不兼容。因此,您需要在所有头文件和 C(以及生成的 C 和生成的头文件)中找到“x”的声明,以查看它是如何声明的。您应该在错误行中有问题的文件名和行号。如果您使用的是较新版本的 GCC,您可能会获得更好的诊断(第二行标识先前声明出现的位置)。请注意,显示准确的错误消息很重要。
-
谢谢,我将在以后的帖子中包含此信息。我正在使用当前在 ubuntu 存储库中的 gcc 版本。