可以将参数化类作为参数传递给另一个将由另一个派生的参数

时间:2016-05-14 10:28:45

标签: c++ templates inheritance

第一个参数化类

template<typename T>
class elements
{
    protected:
        int e,f;
    public:
        elements(){}
        elements(int ee):e(ee){}
        const elements& operator=(const elements& other)
        {
            e = other.e; return *this;
        }

};

基类

template<typename T>
class list
{
    protected:
        T item;
};

最后是争用中的类

template<typename T>
class row:public list<elements<T> >
{
    public:
        row(int a)
        {
            item;
        }
};

如果参数指定为int,list等。然后程序运行,否则我一直收到错误 'item'未在此范围内声明,

我似乎无法开始工作,如果有人能帮我理解它是如何运作的,我将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

您只需指定正确的范围:

template<typename T>
class row:public list<elements<T> >
{
    public:
        row(int a)
        {
            list<elements<T> >::item;
         // ^^^^^^^^^^^^^^^^^^^^
        }
};

请参阅Demo

答案 1 :(得分:0)

简短的回答是编译器不知道item是什么。取决于T是什么,它可以是类型,变量。因为它没有更多信息就无法分辨,它会检查它是否在没有模板化信息的情况下立即可用,因为它不是,编译器必须放弃。

通过说this->item而不仅仅是item,您非常清楚地告诉编译器该项是变量。

评论中链接的问题答案非常好,值得一读。

正如您在此处所见,this->和类范围都有效:https://godbolt.org/g/Pc8oLn