0

私はクラステンプレートと静的をいじっていて、これを見ました:

template<int I>
struct rat
{
    static bool k;
};

bool rat<3>::k = 0; //this is line 84 of the only source file play.cpp

int main(int argc, char **argv)
{

    rat<3> r;
}

コンパイラ エラー: play.cpp:84: エラー: テンプレート パラメータ リストが少なすぎます

私が言ったとき、rat<3>::ki はそのテンプレートをインスタンス化し、その特定のテンプレートの静的を定義していたので、それ以降は使用してrat<3>も問題ないと思いました..なぜこれが機能しないのですか?

4

2 に答える 2

1

テンプレートを忘れました:

template<>
bool rat<3>::k = 0;

そしてもちろん、 MSVS は構文を受け入れます (ただし、言語拡張機能をオフにすると受け入れられません)。

于 2012-07-18T15:39:46.660 に答える
1

する必要があります

template<>
bool rat<3>::k = 0;

しかし、読みやすいので、 thenを使用するfalseことをお勧めしますbool0

また、すべてのテンプレートに対して変数を初期化する場合は、次のようにしますtrue

template<int I>
bool rat<I>::k = true;

I = 3また、テンプレートを次のように特化することもできます。

template<>
bool rat<3>::k = false;
于 2012-07-18T15:39:16.180 に答える