【发布时间】:2020-11-24 08:49:26
【问题描述】:
我有这样的代码结构:
- 一个抽象类 A(它有一个纯虚方法)
- 继承自 A 的类模板 B
- 从 B 继承的类模板 C
class A
{
protected:
int u;
int z;
public:
A(int uu,
int zz)
:u(uu),
z(zz)
{};
int get() const
{
return u;
};
virtual void blah() = 0;
};
template <class T>
class B : public A
{
protected:
std::vector<T> xxxx;
public:
B(int uu,
int zz,
int bbb)
:A(uu,
zz)
{
for(size_t i = 0; i < bbb; i ++)
xxxx[i] = 0;
};
virtual void blah()
{
u = u + 1;
};
};
template <class T>
class C : public B<T>
{
protected:
int qrqr;
public:
C(int uu,
int zz,
int bbb,
int qrqrqr)
:B<T>(uu,
zz,
bbb),
qrqr(qrqrqr)
{
};
virtual void blah()
{
u = u + qrqr;
};
};
编译时出现此错误:
error: 'u' was not declared in this scope
at line: u = u + qrqr;
虽然u 显然是 C 的一个元素,因为 A 是 C 到 B 的基础。
我在这里读到:Class template inheritance C++ 从类模板继承的正确方法是专门化类或将继承的类作为模板,这就是我在这里所做的。编译器似乎并没有抱怨它。难道是因为A是一个抽象类?
我做错了什么?
谢谢!
【问题讨论】:
-
fwiw,我从来没有读过“虚拟类”这个词,
A是一个抽象类(因为它有一个纯虚方法) -
谢谢,我会改正的
-
你错过了标题并且没有模板类,它们被称为类模板。很抱歉吹毛求疵;)
标签: c++ templates inheritance