定義と宣言の違い、およびエンティティのどの用途でエンティティを宣言する必要があるかを知る必要があります。次に、「1つの定義ルール」(ODR)を学習する必要があります。これは、プログラムに複数の定義を含めることが許可されていない場合(したがって、定義をヘッダーに入れることができない場合)とその内容を示します。定義が同一である限り、複数回定義できます(したがって、定義はヘッダーに入れることができます)。
たとえば、宣言している配列。これらはグローバルに表示される配列であるため、プログラムには1つの定義しか含めることができず、したがって、定義をヘッダーに入れることはできません。それらにアクセスする必要があるプログラムのすべての部分は、単にそれらの宣言を知る必要があります。したがって、ヘッダーファイルに定義を入れてODRに違反する代わりに、それらの定義を含むC ++ファイルと、それらの宣言を含むヘッダーを用意する必要があります。
このようなコード:
int foo[100];
配列の宣言と定義の両方foo
。このようなコードをC++ファイルに入れます。この配列のみを宣言するには、次のようにします。
extern int foo[100];
このようなコードをヘッダーに入れます。
クラス定義、インライン関数、およびテンプレートはすべて、定義が同一である限り、複数回定義できるものです。これらの定義はヘッダーに入れることができますが、通常の関数とグローバル変数は1回しか定義できないため、ヘッダーで宣言してから実装ファイルで定義します。