簡體   English   中英

成員初始化程序“ SuperClass”未命名非靜態數據成員或基類

[英]member initializer 'SuperClass' does not name a non-static data member or base 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
            }

     }

之后,出現此錯誤:

成員初始化程序“ SuperClass”未命名非靜態數據成員或基類

我發現有些人有類似的問題,但這並沒有帶我解決問題。 例如: 成員初始值設定項未命名非靜態數據成員或基類,我在那沒有看到很多區別,因此嘗試像他一樣添加空的構造函數。

錯誤說明了一切:

成員初始值設定項“ SuperClass ”未命名非靜態數據成員或基類

SuperClass不是類。 這是一個類模板 因此,它不是您類型的基類。 基類是類模板的特定實例: SuperClass<T,S> 那就是你所需要的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM