グローバル関数の使用

966 ワード

使用方法:
 ".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関数の繰り返し定義が報告されます.1つの考えられる方法は、ヘッダファイルにマクロ定義を追加し、ヘッダファイルが重複して参照されないようにすることです.
/*******************HashTable.h****************/
#ifndef _HASH_TABLE_H_INC
#define _HASH_TABLE_H_INC
unsigned int hash(const void *key, int len)
{
       ....
}
#endif

.cppファイルが1つしかない場合は、実行可能なプログラムを得ることができます.ただし、2つ以上の.cppファイルがHashTable.hを参照している場合は、hash関数の繰り返し定義エラーがリンクされます.
解決策:
    グローバル関数宣言を.hファイルに配置し、定義をcppに配置します.