第一个参数化类
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'未在此范围内声明,
我似乎无法开始工作,如果有人能帮我理解它是如何运作的,我将不胜感激。
谢谢
答案 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