C++:继承模板类时"error: expected class-name before ‘{’ token"

C++: "error: expected class-name before ‘{’ token" when inheriting a template class

本文关键字:before class-name token expected error C++ 继承      更新时间:2023-10-16

我四处寻找解决问题的方法,发现了很多关于循环引用和名称空间的问题(两者都不适用于我的情况),但都不像我遇到的问题。

我有一个模板类定义和实现在数学/矩阵。h:

template<class T>
class Matrix
{
public:
    // constructors, destructors and what not...
};

我在math/vector.h中定义和实现了另一个模板类

#include <maths/matrix.h>
template<class T>
class Vector : public Matrix
{
public:
    // constructors, destructors and what not...
};

在vector.h中,我得到了这个错误"期望的类名在'{'令牌之前",这真的很困扰我。这与matrix。h和vector。h在数学子文件夹中没有任何关系因为我可以在应用程序的其他部分使用matrix。h而不会出现任何问题。我认为这与矩阵是一个模板化的类,因为当我使向量的一个子类的非模板化类(例如somecclass .h),一切编译ok。

非常感谢任何人可以帮助:)

您需要从具体类继承,即从Matrix<T>,而不仅仅是Matrix:

template<class T>
class Vector : public Matrix<T>
{
    …
};

你错过了两件事。

template<typename T>
class Vector : public Matrix <T> //<----- first : provide the type argument
{
}; //<-------- second : semi-colon (same from Matrix class also)