【问题标题】:Cannot used functions defined in header file不能使用头文件中定义的函数
【发布时间】:2011-07-15 15:23:18
【问题描述】:

我的源文件以:

开头
#include "foo.h"

我可以使用头文件中的所有全局变量、类型和结构。在我的头文件中,我从几个包含开始:

#include<file.h>

然后转到全局变量:

#define GLOBAL

然后是结构体:

#typedef struct boo;

然后输入。然后我去函数声明。即:

size_t foo(int*r, size_t nitems);

我做错了什么导致链接器错误>

【问题讨论】:

  • 我不禁想知道#define GLOBAL 是干什么用的?
  • #define global 只是一个全局变量定义,我写过:#define Global 5 但我得到的是 LNK2001
  • 请将您的程序提炼成一个最小的、完整的示例来演示问题并在此处发布,以及它产生的任何编译器和链接器错误。有关如何做到这一点以及它为何如此重要的信息,请参阅sscce.org
  • 您正在包含头文件,因此对象可以编译。但是您需要使用 -l 编译器开关为系统 () 头文件包含要链接到的对象的库。

标签: c header header-files function-declaration


【解决方案1】:

问题可能在于您的链接方式。

【讨论】:

    【解决方案2】:

    头文件为您的源代码提供函数声明。正如您发现的那样,这足以让您的代码编译但不能链接。

    要让它链接,你必须向链接器提供一个包含实际编译函数的文件 - 函数声明实际上是对编译器的承诺,你将这样做。

    具体如何操作取决于您使用的工具以及编译函数的形式。

    【讨论】:

      【解决方案3】:

      #define 用于简单替换标识符的工作方式与复制/粘贴完全相同。

      做完之后

      #define GLOBAL 5
      

      以下代码

      int GLOBAL;
      GLOBAL = 13;
      putchar(GLOBAL);
      

      转化为

      int 5;
      5 = 13;
      putchar(5);
      

      这显然不能编译。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        相关资源
        最近更新 更多