「static const」メンバーの初期化に関して問題があります。テンプレート化されたクラスでは、const メンバーを定義し、クラス外で初期化します。
このクラスが複数の .cpp ファイルに実装されている .h ファイルを含めると、LNK2005 エラー (私は VS2010 を使用しています) が表示され、定数が既に定義されているというメッセージが表示されます。
// List.hpp
template <class T>
class List {
static const double TRIM_THRESHOLD;
};
template <class T>
const double List<T>::TRIM_THRESHOLD = 0.8;
メンバーの初期化を .cpp ファイルに入れてみましたが、定数がまったく定義されていないというリンカー エラーが発生します。リストがテンプレート化されておらず、初期化を .cpp ファイルに入れた場合、すべて問題ありません。
この状況の解決策はありますか? 私はすでにファイルの周りに #ifdef/define 節を持っていますが、それは間違いなく解決策ではありません。