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’

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

    评论

报告相同问题?

悬赏问题

  • ¥20 易康econgnition精度验证
  • ¥15 线程问题判断多次进入
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致