使用方法:
在".h"里声明
unsigned int hash(const void *key, int len);
在".cpp"里实现
unsigned int hash(const void *key, int len)
{
....
}
错误使用:
将全局函数的定义放到.h文件中,且头文件没有宏保护。
/*******************HashTable.h****************/
unsigned int hash(const void *key, int len)
{
....
}
则g++在编译过程中报hash()函数重复定义(multiple definitionof)的错误,原因如下:
当HashTable.h 被同一 .cpp文件多次引用时(可能是间接多次引用),编译生成相应的 .o 文件,链接时候会报 hash函数重复定义。
一个可能想到的方法是在头文件中加入宏定义,防止头文件被重复引用,如:
/*******************HashTable.h****************/
#ifndef _HASH_TABLE_H_INC
#define _HASH_TABLE_H_INC
unsigned int hash(const void *key, int len)
{
....
}
#endif
如果你只有一个 .cpp文件,你可能得到一个可以运行的程序。但如果你有两个或以上的 .cpp 文件引用 HashTable.h ,链接时仍会报hash函数重复定义错误。
解决办法:
将全局函数声明放到.h文件中,将定义放到cpp中。