【问题标题】:error: conflicting types for 'x'错误:“x”的类型冲突
【发布时间】:2013-07-16 17:05:54
【问题描述】:

我是 C 新手,我已经阅读了许多试图处理这个问题的帖子,他们都说错误消息:

error: conflicting types for 'x'

发生是因为在声明之前使用了函数。这不是(至少不是以明显的方式)我的代码的情况。

我的项目中有几个文件:

  • minty.c
  • lexer.c
  • lexer.h
  • minty_util.c
  • minty_util.h

我将lexer.cminty_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.hlexer.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 版本。

标签: c gcc types include


【解决方案1】:

检查标题保护。它说如果你多次包含一个文件就会有问题

看下面的链接

http://en.wikipedia.org/wiki/Include_guard

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 2013-03-25
    • 1970-01-01
    • 2014-03-10
    • 2012-10-04
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多