因此,我为Hoemwork作业分配了3个文件,这个问题与作业无关,但是试图弄清楚为什么我想将其用作贝司的代码无法正确编译。
首先,在文件(linkedList.h)中有一个抽象类(linkedListType),可以在这里找到:> http://pastebin.com/STGHvdDs>
然后,类unorderedLinkList继承自该类(在文件unorderedLinkedList.h中),可以在此处找到http://pastebin.com/yyv5vT7i
没有单独的.cpp文件,所有文件都在.h文件中。
当我编译主程序/测试程序时(只是为了查看在开始分配之前我会遇到什么错误),我会收到很多类似于以下内容的错误:
unorderedLinkedList.h:在成员函数“bool unorderedLinkedList::search(const Type&)const”中:
unorderedLinkedList.h:46:错误:在此范围内未声明“first”
unorderedLinkedList.h:在成员函数“void unorderedLinkedList::insertFirst(const Type&)”中:
unorderedLinkedList.h:66:错误:在此范围内未声明“first” *
它们都围绕着这一点(“未在范围内声明”)。
有人建议对这些变量(在linkedListType中定义为私有(private))使用linkedListType:::访问方法,但这并没有帮助解决此问题。
请帮忙,这样我就可以快点做一些我不能做的作业,直到我知道为什么它不起作用为止。因此,您不要认为我正试图让您为我做作业:我的作业是写教授给出的几种方法来操纵链表。
谢谢!
最佳答案
您的问题是,您尝试将first
名称作为独立的名称来访问,而该名称在范围内找不到:类模板不会使用模板化的基类来查找名称,除非将该名称作为从属名称。非依赖性名称在第一阶段查找过程中被解析,此时基类是未知的(可以专门用于具有完全不同的布局)。在第二阶段查找过程中查找从属名称。
因此,您需要使用以下方式将名称first
用作从属名称:
this->first
linkedListType<T>::first
我个人的喜好是使用
this->
,因为这很好地说明了实际含义,并且如果成员的位置发生更改,也不需要更改它。