0

私はかなり初心者 (C++) のプログラマーで、特定のクラスに属するオブジェクトの数を保持するための CRTP を発見しました。

私は次のように実装しました:

template <typename T>
struct Counter
{
    Counter();
    virtual ~Counter();

    static int count;
};

template <typename T> Counter<T>::Counter()
{
    ++count;
}

template <typename T> Counter<T>::~Counter()
{
    --count;
}

template <typename T> int Counter<T>::count(0);

これはうまくいくようです。ただし、これを宣言した別のヘッダー ファイルで継承するのは好きではないようです。

class Infector : public Counter<Infector>
{
    public:
        Infector();
        virtual ~Infector();

        virtual void infect(Infectee target);
        virtual void replicate() = 0;
        virtual void transmit() = 0;

    protected:
    private:
};

継承なしですべてがうまくコンパイルされるので、テンプレートの宣言と定義を確認できないと確信しています。私が間違っている可能性がある場所とそれについて何ができるかについて、誰か提案がありますか? インフェクタ定義の前に extern を使用して、コンパイラに Counter テンプレートなどについて知らせる必要がありますか?

乾杯、

カイル

4

1 に答える 1

2

宣言と定義について具体的に言及されていることに気づきました。
それらを別々のファイルに入れていますか?

もしそうなら、テンプレートはヘッダーのみのクリーチャーです。定義をヘッダーファイルに入れる必要があります。

于 2010-07-09T20:39:36.457 に答える