我已经四处寻找解决我的问题的方法,发现很多关于循环引用和名称空间问题(在我的情况下都不适用),但没有像我遇到的那样。
我在maths / matrix.h中定义并实现了一个模板类:
template<class T>
class Matrix
{
public:
// constructors, destructors and what not...
};
我在maths / vector.h中定义并实现了另一个模板类
#include <maths/matrix.h>
template<class T>
class Vector : public Matrix
{
public:
// constructors, destructors and what not...
};
我得到了这个错误“在vector.h中'{'token'之前的期望的class-name,这真的让我烦恼。这与matrix.h和vector.h在maths子文件夹中没有任何关系,因为我可以在我的应用程序的其他部分使用matrix.h而没有任何问题。我认为它与Matrix是一个模板化的类有关,因为当我将Vector作为非模板化类的子类(例如SomeClass.h)时,一切都编译好了。
非常感谢任何可以提供帮助的人:)
答案 0 :(得分:12)
您需要从具体类继承,即从Matrix<T>
继承,而不仅仅是Matrix
:
template<class T>
class Vector : public Matrix<T>
{
…
};
答案 1 :(得分:6)
你错过了两件事。
template<typename T>
class Vector : public Matrix <T> //<----- first : provide the type argument
{
}; //<-------- second : semi-colon (same from Matrix class also)