1

この質問に対するsthの回答から始めます。

次のコードが異なる.ccファイルに複数回インクルードされてリンクされているヘッダーファイルに入れられた場合、複数の定義エラーを解決する方法を考えていました。

template <typename T>
class C {
   static const int K;
   static ostream& print(ostream& os, const T& t) { return os << t;}
};

// general case
template <typename T>
const int C<T>::K = 1;

// specialization
template <>
const int C<int>::K = 2;
4

3 に答える 3

2

特殊化を .cc ファイルの 1 つに移動します。テンプレートのバージョンをヘッダーに残します。

于 2010-06-14T17:51:55.520 に答える
0

プラットフォームによっては、#ifdef や #pragma once などで囲むことができます。

于 2010-06-14T17:52:32.783 に答える
0

私が考えることができる唯一のことは、特殊化の前にすべてのK型の変数を定義しているため、コンパイラが特殊化に到達したときに変数定義が既に存在するということです..<int>

その場合は、特殊化C<int>::Kを前に移動する必要があります。C<T>::K

于 2010-06-14T17:52:52.133 に答える