模板化的子类和继承

时间:2016-05-23 20:30:20

标签: c++ templates inheritance compiler-errors subclass

我有一个课程,由于与这个问题无关的原因,需要成为一个模板。该类目前包含一个子类。我现在正在尝试创建另一个与第一个类功能非常相似的子类,所以我想我会把它变成一个孩子。但是,我无法解决这个问题:子类似乎无法访问父级的任何受保护元素。

这是一个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"
    }
};

有没有神奇的咒语才能做到这一点,或者我在做一些概念上愚蠢的事情?

0 个答案:

没有答案