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:错误:
ComponentClass.h:14:错误:未在此范围内声明位置
ComponentClass.h:14:错误:数值常量前应为
请在下面找到我的代码。
ComponentClass.h
然后,您可以像现在一样在类外定义它。但是,为了避免重复定义,典型的解决方案如下:
也就是说,不要让
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