我有类 SuperClass 和 Subclass,其中 SubClass 继承自 SuperClass。
在 SuperClass 中,我有一个常量属性,其值取决于使用它的子类。但是我需要在 SuperClass 中声明它,因为 SuperClass 中还有一些其他方法也在使用它,但是我需要在 SubClass 中初始化它,因为常量的值会根据实例化的 SubClass 类型而变化。
从上一个关于 SO的问题中,我知道最好的解决方案是使用 trait 类。然而,使用这样的解决方案将涉及对我的代码进行大量更改。因此,我选择了此处显示的方法。
超类.h
#ifndef SUPERCLASS_H
#define SUPERCLASS_H
#include <string>
template <class T, class P>
class SuperClass
{
public:
typedef T type;
typedef P position;
static const position NULLPOSITION;
};
#endif
子类.h
#ifndef SUBCLASS_H
#define SUBCLASS_H
#include <string>
#include "SuperClass.h"
template <class T>
class SubClass:public SuperClass<T,int>
{
};
template<class T>
const typename SuperClass<T,int>::position SuperClass<T,int>::NULLPOSITION=0;
#endif
主文件
#include <cstdlib>
#include <iostream>
#include "SubClass.h"
using namespace std;
int main(int argc, char *argv[])
{
SubClass<int> subClass;
system("PAUSE");
return EXIT_SUCCESS;
}
在编译我得到
invalid use of undefined type `class SuperClass<T, int>
和
declaration of `class SuperClass<T, int>
错误。可能是什么问题?