2016-01-13 57 views
0

我有我的項目中的以下文件:在我的頭文件多個定義 - 代碼塊

table.h - signatures of methods used in link.c and hash.c 
link.c - implements ALL methods in table.h 
hash.c - implements ALL methods in table.h 
test.c - unit tests for link.c and hash.c 

我用警衛。 link.c和hash.c都有相同方法集的不同實現。

當我建立並運行我的項目,我得到拋出每種方法的錯誤它說:

我已經試過宣佈方法爲extern「的多重定義」,它並沒有解決這個問題。

table.h

#ifndef TABLE_H_INCLUDED 
#define TABLE_H_INCLUDED 

typedef struct Table *Table_t; 

Table_t Table_new(void); 

void Table_free(Table_t oTable); 

int Table_getLength(Table_t oTable); 

int SymTable_put(SymTable_t oSymTable, 
       const char *pcKey, 
       const void *pvValue); 

void *Table_get(Table_t oTable, 
        const char *key); 

int Table_contains(Table_t oTable, 
         const char *key); 


void *Table_remove(Table_t oTable, 
        const char *key); 


void *Table_replace(Table_t oTable, 
         const char *key, 
         const void *value); 
#undef TABLE_H_INCLUDED 
#endif 

錯誤日誌:

OBJ \調試\ table_link.o ||在功能`Table_new「:|

E:\ symbolTableProject \ table_link.c | 33 |`Table_new'的多重定義|

obj \ Debug \ table_hash.o:E:\ symbolTableProject \ table_hash.c | 36 |首先在此處定義|

我該如何解決這個問題?

+0

你也可以包含這些文件嗎? –

+0

向我們展示的重要文件是頭文件。您必須在頭文件中定義一些符號(我們不知道哪一個符號,因爲您沒有向我們展示完整的和未經編輯的錯誤輸出),而不僅僅是聲明它。請*編輯您的問題*以包含頭文件以及完整和未經編輯的錯誤日誌。也可以很好地向我們展示'test.c'文件的概要。 –

+0

另外,do * both * link.c'和'hash.c'源文件定義了相同的函數嗎? –

回答

1

我想關鍵的一點是

link.c - implements ALL methods in table.h 
hash.c - implements ALL methods in table.h 

這些文件無法連接到相同的輸出:我的意思是,每個功能必須實現獨一無二的。

您可以在使用函數的文件中使用單個/多個c文件/ s而不是#include "table.h"執行所有功能。重要的是每個函數只能在源文件中執行1次。