我的项目中有以下文件:
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 \ Debug \ 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 :(得分:1)
我猜关键点是
SELECT DISTINCT *
这些文件无法链接到同一输出:我的意思是,每个函数必须是唯一的。
您可以在单个/多个link.c - implements ALL methods in table.h
hash.c - implements ALL methods in table.h
文件中实现所有函数,而在使用函数的文件中实现c
。重要的是每个函数必须只在源文件中实现一次。