1

非統合テンプレート定数を初期化しようとしています。

コードの下を見つけてください:

#ifndef _EXETENDED_CLASS_H
#define _EXETENDED_CLASS_H


template<class T>
class BaseClass
{
            public:
                   BaseClass();
                   ~BaseClass();


};

template <class T>
BaseClass<T>::BaseClass()
{}

template <class T>
BaseClass<T>::~BaseClass()
{}



template<class T>
class ExtendedClass:public BaseClass<T>
{
            public:
                   typedef ExtendedClass<T>* position;
                   static const position NULLPOSITION;

                   ExtendedClass();
                   ~ExtendedClass();


           private:

                   position _successivo; 
};


template<class T>
const  ExtendedClass<T>::position ExtendedClass<T>::NULLPOSITION = 0;

template <class T>
ExtendedClass<T>::ExtendedClass()
{}

template <class T>
ExtendedClass<T>::~ExtendedClass()
{}

#endif

問題は線にあります

template<class T>
const  ExtendedClass<T>::position ExtendedClass<T>::NULLPOSITION = 0;

非積分型であるため、定数をインラインで初期化できません。

私がオンラインで読んだことから、.cppファイルでconst初期化を移動した場合、問題はなくなったようです。ただし、テンプレート化されたクラスを扱っているため、これを行うことはできません。以下に詳述するようなエラーが発生します。

ExtendedClass.h:43: error: expected init-declarator before "ExtendedClass"
ExtendedClass.h:43: error: expected `;' before "ExtendedClass"
make: *** [ExtendedClass.o] Error 1

誰かが私のためにそれを見てくれませんか?よろしくお願いします。

4

1 に答える 1

1

型を 2 回書きましたが、識別子を修飾していません。貧弱なコンパイラが混乱しているのも不思議ではありません。

template<class T>
const  ExtendedClass<T>::position ExtendedClass<T>::NULLPOSITION = 0;
于 2012-12-06T13:42:50.677 に答える