C ++非Integral模板Const初始化期望ClassName之前的init-declarator

时间:2012-12-06 13:40:04

标签: c++ g++ initialization const integral

我正在尝试初始化非整数模板常量。

请在下面找到代码:

#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

有人可以帮我看一下吗?非常感谢你提前做好准备。

1 个答案:

答案 0 :(得分:1)

您已将该类型写入两次,并且未对该标识符进行限定。难怪糟糕的编译器很困惑。

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