【发布时间】:2018-01-16 05:18:13
【问题描述】:
我有这个代码:
template<typename A, typename B = A>
class MyClass;
template<typename A>
class MyClass<A, void>
{
protected:
A a;
MyClass<A, void>(const A& a):
a(a)
{}
public:
const A& getA() const
{
return a;
}
};
template<typename A, typename B>
class MyClass : public MyClass<A, void>
{
private:
B b;
public:
MyClass<A, B>(const A& a, const B& b):
MyClass<A, void>(a), b(b)
{}
const B& getB() const
{
return b;
}
const auto getAplusB() const
{
return a+b;
}
};
getAplusB 方法无法编译并显示消息 a is not declared。但是,继承似乎有效,所以我可以使用this->getA() + b。我也尝试过dynamic_cast<const MyClass<A, void>*>(this)->a + b,但遇到了另一个编译错误a is protected。我在这里错过了什么?
【问题讨论】:
-
显然,将
a更改为this->a有效... -
@user202729 好点。它解决了我的问题,但我仍在等待可以解释这一点的人。
-
已经在下面的答案中了。
-
是的,我现在知道了,我刷新页面时它不在这里
标签: c++ oop templates inheritance