an_tang 2017-10-11 07:53 采纳率: 25%
浏览 957

数据结构和算法分析 c++描述 模拟List出现的错误

iterator和const_iterator以及节点Node是类List中嵌套类
iterator继承来自const_iterator
const_iterator里面有Node* current变量以及retrieve()函数
重点来了!!!!!!!!!!!!!!!!!!!
iterator好像看不到上述的那个变量以及函数
编译器一直报错
希望高手帮忙指点一下(限于篇幅已经把一些不相关的函数已经删除)
#include
using namespace std;
template
class List{
private:
struct Node
{
Object data;
Node *prev;
Node *next;
Node(const Object&d=Object(),Node *p=NULL,Node *n=NULL)
:data(d),prev(p),next(n){}

};
public:
class const_iterator
{
public:
const_iterator():current(NULL)
{}
protected://
Node *current;

            Object &retrieve()const
            {
                return current->data;
            }              
            const_iterator(Node *p):current(p)
            {}       
            friend class List<Object>;
    };
    class iterator:public const_iterator
    {
        public:
            iterator()
            {}

            Object & operator*()
            {
                return retrieve();//
                /*
                List.cpp:64:37: error: there are no arguments to ‘retrieve’ that depend on a template parameter, so a declaration of ‘retrieve’ must be available [-fpermissive]
                 return retrieve();
                */
            }
            const Object& operator*()const
            {
                return const_iterator::operator*();
            }
            iterator &operator++()
            {
                current = current->next; ////////   看不到current
                return *this;
                /*List.cpp:64:37: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)

List.cpp: In member function ‘List::iterator& List::iterator::operator++()’:
List.cpp:72:21: error: ‘current’ was not declared in this scope
/
}
iterator operator++(int)
{
iterator old = *this;
++(*this);
return old;
}
protected:
iterator(Node
p):const_iterator(p)
{}

            friend class List<Object>;
    };
    public:

private:
    int theSize;
    Node *head;
    Node *tail;

};
int main()
{
return 0;
}

  • 写回答

2条回答 默认 最新

  • Dreamt灬 2017-10-11 11:53
    关注

    protected://
    Node *current;

    只有在派生类中才可以通过派生类对象访问基类的protected成员

    List.cpp:64:37: error: there are no arguments to ‘retrieve’

    这个错误猜测也是同样错误,方便提供源码,帮你看一下嘛?

    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能