C++ 为什么我的编译器让我添加;这->&引用;从子类访问父变量的指针

C++ 为什么我的编译器让我添加;这->&引用;从子类访问父变量的指针,c++,c++11,C++,C++11,我正在编写一个简单的LinkedList类,它是抽象列表类的子类。完成List类后,我开始编写LinkedList类,我注意到编译器不允许我直接从List类的成员访问受保护的变量,即使LinkedList是List的子类。当我没有将“this->”指针添加到列表的某个变量之前时,我会得到一个错误,表明该变量未在范围中声明。我确信对此有一个简单的解释,但我不明白为什么我的List类中的两个受保护变量及其成员不能从LinkedList类的成员访问 名单: 模板 班级名单{ 受保护的: 无符号整数;

我正在编写一个简单的LinkedList类,它是抽象列表类的子类。完成List类后,我开始编写LinkedList类,我注意到编译器不允许我直接从List类的成员访问受保护的变量,即使LinkedList是List的子类。当我没有将“this->”指针添加到列表的某个变量之前时,我会得到一个错误,表明该变量未在范围中声明。我确信对此有一个简单的解释,但我不明白为什么我的List类中的两个受保护变量及其成员不能从LinkedList类的成员访问

名单:

模板
班级名单{
受保护的:
无符号整数;
节点*头;
公众:
List();
~List();
虚空追加(tx)=0;
虚拟T remove()=0;
虚拟布尔为空();
};
模板
列表::列表(){
数值=0;
head=NULL;
}
模板
列表::~List(){
while(NULL!=头){
节点*newHead=head->getNext();
删除标题;
head=新head;
}
}
模板
bool List::isEmpty(){
if(numElements)
返回false;
返回true;
}
带有一个成员的LinkedList示例:

模板
类LinkedList:公共列表{
公众:
无效附加(tx);
T删除();
空尾(tx);
无效插入(T x,内部位置);
T在(int pos)位置移除_;
作废打印();
int getNumElements();
};
模板
void LinkedList::append(T x){
//创建一个新节点,其下一个节点作为头部
Node*appendNode=新节点(x,this->head);
//将头部设置为此新节点
此->头部=附加节点;
这->numElements++;
}
包含的节点类(不太相关)

\ifndef节点
#定义节点
模板
类节点{
私人:
T值;
节点*下一步;
公众:
节点(tv,节点*n);
T getValue()常量;
节点*getNext()常量;
void setNext(节点*p);
};
模板
节点::节点(TV,节点*n){
值=v;
next=n;
}
模板
T节点::getValue()常量{
返回值;
}
模板
Node*Node::getNext()常量{
下一步返回;
}
模板
void节点::setNext(节点*n){
这个->下一个=n;
}
#恩迪夫

Hi,也许这与范围界定有关?列出
的目的是什么?您的类层次结构非常奇怪,更重要的是,如果实现链表,则不必这样做。如果您以传统的方式(一个模板类和一个内部节点类)编码一个链表,您就不会遇到您的问题。您好,我现在看到这是由于类是一个模板基类,谢谢您的回复。另外@PaulMcKenzie我知道这有点奇怪,但那是因为它是针对一个赋值的,在选择类层次结构时没有任何灵活性。我认为这类选课是因为我们刚刚复习过抽象类,作业应该是包含抽象类的。是的,但是为什么这么多老师(或机构)坚持用这样一种迂回的方式来教C++的一个方面?有很多实际的例子,抽象类的用法是有意义的,这不是其中之一。这是一个我没有答案的问题,但我同意,它是大学学习C++的一个令人讨厌的部分。