错误的多重定义 - CodeBlocks

时间:2016-01-13 07:59:26

标签: c codeblocks

我的项目中有以下文件:

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 |首先在此定义|

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我猜关键点是

SELECT DISTINCT *

这些文件无法链接到同一输出:我的意思是,每个函数必须是唯一的。

您可以在单个/多个link.c - implements ALL methods in table.h hash.c - implements ALL methods in table.h 文件中实现所有函数,而在使用函数的文件中实现c。重要的是每个函数必须只在源文件中实现一次。