グローバル関数の使用
966 ワード
使用方法:
グローバル関数の定義を.hファイルに配置し、ヘッダファイルにマクロ保護がありません.
/*******************HashTable.h****************/
g++はコンパイル中にhash()関数の繰り返し定義(multiple definitionof)のエラーを報告します.原因は以下の通りです.
HashTable.hが同じ.cppファイルで複数回参照されている場合(間接複数回参照の可能性があります)、コンパイルして対応する.oファイルを生成し、リンクするとhash関数の繰り返し定義が報告されます.1つの考えられる方法は、ヘッダファイルにマクロ定義を追加し、ヘッダファイルが重複して参照されないようにすることです.
/*******************HashTable.h****************/
.cppファイルが1つしかない場合は、実行可能なプログラムを得ることができます.ただし、2つ以上の.cppファイルがHashTable.hを参照している場合は、hash関数の繰り返し定義エラーがリンクされます.
解決策:
グローバル関数宣言を.hファイルに配置し、定義をcppに配置します.
".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に配置します.