我的一些构造函数有问题。这两个子类都需要获得相同的类(没有父类(super class)),这就是为什么这些类应在父类(super class)中初始化的原因:

template<typename T, typename S>
class SuperClass {
protected:
    OtherClass <T> const& _class1;
    OtherOtherClass <T> const& _class2;

    SuperClass() {

    }

    SuperClass(OtherClass<T> const& class1, OtherOtherClass<T> const& class2)
        : _class1(class1), _class2(class2)
    {
            // Alternative I tried:
            // this->_class1 = class1;
            // this->_class2 = class2;
    }

我尝试通过以下方式使用它:
    template<typename T, typename S>
    class SubClass1 : public SuperClass<T, S> {
    private:
        someFunc() {
            return this->_class1.getSomething(); // as an example
        }

    public:
        SubClass1(OtherClass<T> const& class1,
                OtherOtherClass<T> const& class2)
                : SuperClass(class1, class2)
            {
                // some definitions
            }

     }

之后,此错误出现:



我发现有些人也有类似的问题,但这并没有带我解决问题。例如:member initializer does not name a non-static data member or base class
我在那里没有看到很多区别,并尝试像他一样添加一个空的构造函数。

最佳答案

该错误说明了一切:


SuperClass不是一个类。这是一个类模板。因此,它不是您类型的基类。基类是类模板的特定实例:SuperClass<T,S>。那就是你所需要的:

    SubClass1(OtherClass<T> const& class1,
            OtherOtherClass<T> const& class2)
    : SuperClass<T,S>(class1, class2)
    //          ^^^^^

关于c++ - 成员初始化程序 'SuperClass'未命名非静态数据成员或基类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41226040/

10-11 19:03