我有一个课程,由于与这个问题无关的原因,需要成为一个模板。该类目前包含一个子类。我现在正在尝试创建另一个与第一个类功能非常相似的子类,所以我想我会把它变成一个孩子。但是,我无法解决这个问题:子类似乎无法访问父级的任何受保护元素。
这是一个MWE:
#pragma once
template <typename T>
class testInheritance
{
public:
testInheritance() : _someTypedStuff(T())
{}
// Subclasses :
class subclassA; // This subclass will be the parent
class subclassB; // This subclass should inherit from subclassA
subclassA getClassA() { return subclassA(); }
subclassB getClassB() { return subclassB(); }
protected:
T _someTypedStuff; // Some junk to justify having a template
};
template <typename T>
class testInheritance<T>::subclassA {
public:
subclassA() : _someNumber(10) {} // Set `_someNumber` to 10
int test() {
return _someNumber; // Returns 10
}
protected:
int _someNumber; // This is set to "10" in the constuctor
};
template <typename T>
class testInheritance<T>::subclassB : public testInheritance<T>::subclassA {
// Call subclassA's constructor, setting `_someNumber` to 10
subclassB() : subclassA() {}
int anotherTest() {
// Here is the compiler error:
return _someNumber + 1; // "error : '_someNumber' was not declared in this scope"
}
};
有没有神奇的咒语才能做到这一点,或者我在做一些概念上愚蠢的事情?