27

コンパイル中に、ヘッダー ファイル内のテンプレートの特殊化を参照する「複数定義」エラーが発生します。特殊化をソース ファイルに入れる必要がありますか?

4

2 に答える 2

31

特化した関数の場合は、それらを .cpp ファイルに入れるか、ヘッダーでインラインにすることができます。

James が指摘するように、関数をインライン化しない場合でも、ヘッダーで特殊化を宣言する必要があります。そうしないと、コンパイラは他の場所でそれらを探す必要があることを知りません。

次に、実装 (定義) を .cpp ファイルに入れることができます。他の機能と同様です。

于 2012-08-02T08:52:08.547 に答える
11

いいえ、個別にコンパイルされたファイルに特殊化を入れる必要はありませんが、特殊された関数テンプレートは完全に特殊化されているため、単なる通常の関数であることに注意する必要があります。

そのため、宣言されていない限り、複数の翻訳単位で定義することはできませんinline

于 2012-08-02T08:50:17.100 に答える