2016-04-30 57 views
0

我有几个库,我在同一个系统的模块中使用。 我的问题是,当我做#包括h文件,最后在系统中它说“未定义的引用...”模块的不同功能,包括两次,每次不同的模块。这可能是因为双重声明,我该如何管理它?模块化的系统在c

我有 “rialtor.h”,其中:

#include <stdbool.h> 
#include "apartment.h" 
#include "offer.h" 

我有 “client.h”,其中:

#include <stdbool.h> 
    #include "apartment.h" 
    #include "offer.h" 

我在 “system.c”:

#include "rialtor.h" 
#include "client.h" 
+0

如果简单地在C源文件中包含额外的头部会导致链接器抱怨未定义的引用,否则它不会这样做,那么您必须在该头部中有一个或多个函数定义(而不仅仅是函数原型)。这将是非常糟糕的形式,但不是问题的根源。我们需要看[mcve]给你一个完整的答案。 –

+0

尤其要注意的是,在C中完全可以接受同一函数或变量的多重兼容*声明*。这当然不是你的问题。同一个函数或变量的多个*定义*是不允许的,但这不是链接器所抱怨的。 –

回答

0

您正在看错的地方。一个未定义的参考是一个链接器错误。您不会在生成可执行文件的命令行中包含所有需要的对象文件或库。

+0

你确定吗?因为所有的图书馆都在那里,所有的标题,但由于模块化,我在一些地方包括他们两次。 原因一般我知道它是链接器和你说的东西,但我绝对包含所有需要的信息 – KittyT2016

+0

@ KittyT2016,包括一个C源文件中的头文件只是提供了声明。它不会自动导致声明函数的定义被定位和链接。 –