GW680 2020-08-31 18:31 采纳率: 0%
浏览 56

c++实现链表用遍历的方式输出,如何改正

数据结构想实现链表用遍历的方式输出(那个写的pr函数),目前报错
No matching member function for call to 'traverse'
如何改正,先谢谢了

#include <iostream>
using namespace std;
template<typename T>struct PR{
   void operator()(T &e) { cout << e << " "; }
};
template <typename T> struct ListNode {
  int data;
  ListNode<T> *pred;
  ListNode<T> *succ;
  ListNode() {}
  ListNode(int e, ListNode<T> *p = NULL, ListNode<T> *s = NULL)
      : data(e), pred(p), succ(s) {}
};
template <typename T> class List {
private:
  int _size;
  ListNode<T> *header;
  ListNode<T> *trailer;

public:
  void init();
  int getsize() { return _size; }
  List() { init(); }
  template <typename VST> void traverse ( VST& ); 
  ListNode<T> *insertb(ListNode<T> *p, T const &e) {
    ListNode<T> *x = new ListNode<T>(e, p->pred, p);
    x->pred->succ = x;
    x->succ->pred = x;
    return x;
  }
  ListNode<int> *first() { return header->succ; }
};
template <typename T> void List<T>::init() {
  header = new ListNode<T>;
  trailer = new ListNode<T>;
  header->pred = NULL;
  header->succ = trailer;
  trailer->pred = header;
  trailer->succ = NULL;
  _size = 0;
}

template <typename T> template<typename VST>
void List<T>::traverse(VST &visit) {
  for (ListNode<T> *p = header->succ; p != trailer; p = p->succ) {
    visit(p->data);
  }
}

template <typename T>void pr(List<T> &l){
  l.traverse(PR<T>());
}
int main() {
  List<int> list;
  list.init();
  ListNode<int> *f = list.first();
  list.insertb(f, 3);
  list.insertb(f, 34);
  list.insertb(f, 13);
  list.insertb(f, 39);
  list.insertb(f, 23);
  pr(list);
  return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-08-31 18:47
    关注
    template <typename T>void pr(List<T> &l){
      l.traverse(PR<T>());
    }
    ->
    template <typename T>void pr(List<T> &l){
      l.traverse(PR<T>(l));
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 sql server 2012的下载出错
  • ¥15 图像识别用户软件开发
  • ¥20 类原生rom lineageos
  • ¥15 有没有会做中专,云计算,卷子的,有偿一百块
  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv
  • ¥40 怎样批量对比两个数据库的表差异
  • ¥15 lettuce连接哨兵redis,主从切换异常