1

シンプルなテンプレート化されたクラスでいくつかのものをラップしたい:

template <int dim>
class internal {
    static unsigned int table[dim][dim];
};

そして、さまざまなテンプレート化されたパラメーターの表を埋めます。

template <>
unsigned int
internal<1>::table[1][1]  = {{0}};

template<>
unsigned int
internal<2>::table[2][2] =
                {{0, 1},
                 {2, 3}
                };

しかし、重複シンボルの問題に遭遇しました:

12 duplicate symbols for architecture x86_64

何かが間違っていますが、何ですか?p/s/ トピックをすばやく検索しても、同様の質問は軽減されません。

4

1 に答える 1

1

定義は .cpp ファイルにある必要があります。大量の次元に対してこれらの定義を与えることは絶対にないので、間違った次元が選択された場合はコンパイラエラーが発生する必要があります。実装は次のようになります。

ヘッダ:

template <int dim>
class internal {
    static unsigned int table[dim][dim];
    static_assert(dim <= 3, "Dimension too big!");
};

ソース:

template <>
unsigned int
internal<1>::table[1][1]  = {{0}};

template<>
unsigned int
internal<2>::table[2][2] =
                {{0, 1},
                 {2, 3}
                };

template<>
unsigned int
internal<3>::table[3][3] =
                {{0, 1, 2},
                 {3, 4, 5},
                 {6, 7, 8}
                };

注:法線の静的テンプレート メンバー変数とは異なり、ヘッダーでテーブルを定義する必要はありません。

于 2013-06-18T10:16:35.830 に答える