2016-04-30 63 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源文件中的頭文件只是提供了聲明。它不會自動導致聲明函數的定義被定位和鏈接。 –