This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center
                            
                        
                    
                
                                7年前关闭。
            
                    
我在一个类中有一个非整数常量声明。

我不断收到以下信息:


  ComponentClass.h:14:错误:const typename ComponentClass<T> ::position NULLPOSITION的模板声明
  ComponentClass.h:14:错误:未在此范围内声明位置
  ComponentClass.h:14:错误:数值常量前应为;


请在下面找到我的代码。

ComponentClass.h

#ifndef _ComponentClass_H
#define _ComponentClass_H

template< class T>
class ComponentClass
{
public:

       typedef ComponentClass* position;
       ComponentClass();
};

template<class T>
const typename ComponentClass<T>::position NULLPOSITION=(position)0;

template<class T>
ComponentClass<T>::ComponentClass(){}
#endif

最佳答案

您看到此错误的原因是position不在表达式(position)0的范围内。您可以完全省略强制转换(即0)。如果要包括它,则需要像在typename ComponentClass<T>::position的定义中一样使用NULLPOSITION

您似乎在定义静态成员变量,而没有先在类中声明它,如下所示:

static const position NULLPOSITION;


然后,您可以像现在一样在类外定义它。但是,为了避免重复定义,典型的解决方案如下:

// ComponentBase.h
class ComponentBase {
public:
    typedef ComponentBase* position;
    static const position NULLPOSITION;
};

// ComponentClass.h
template<class T>
class ComponentClass : public ComponentBase { ... };

// ComponentBase.cpp
const ComponentBase::position ComponentBase::NULLPOSITION = 0;


也就是说,不要让NULLPOSITION成为每个ComponentClass实例的成员,而是让所有ComponentClass实例共享一个定义。

10-04 23:02