1

复制构造函数:

 // Copy constructor.  Copies another list.

CRevList(const CRevList &b)
 {
    cout << "Copy" << endl;

    const Node *Start = b.Begin();

    const Node *End = b.End();

    cout << "Start; " << Start << endl;

    cout << "End; " << End << endl;

    cout << "b.Begin() : " << b.Begin() << endl;
    cout << "b.End()   : " << b.End() << endl;
    T temp_data;

    for(;;){
            cout << "Start->data() loop: " << Start->Data() << endl;

            temp_data = Start->Data();

            PushBack(temp_data);


            if(Start == End)
                    break;

            Start = Start->m_next;


    }

}

调用 End 以获取指向尾节点的指针(Begin() 相同):

const Node *End() const {}

   Node *End() {
      cout << "m_tail " << m_tail << endl;
      return m_tail;
   }

对不起代码量。我只是不知道我哪里错了

编辑:好的,这是一个最小的完整示例

司机

using namespace std;

#include <iostream>
#include "RevList.h"

int main(){

    CRevList<int> List;
    List.PushBack(7);
    List.PushBack(300);
    cout << "End Ref: " << List.End() << endl;
    cout << "begin ref: " << List.Begin() << endl;
    cout << List.End() << endl;

    CRevList<int> New_list(List);

    cout << "End Ref: " << New_list.End() << endl;
    cout << "begin ref: " << New_list.Begin() << endl;



}

双链表的实现:

template<class T> class CRevList
{

public:
//constructor stuff doesn't matter... ;

class Node
{
public:
 friend class CRevList;

 Node() {m_next = 0;  m_prev = 0;}
 Node(const T &t) {m_payload = t;  m_next = 0;  m_prev = 0;}

 T Data() {return m_payload;}
 const T Data() const {return m_payload;}

private:
 Node    *m_next;
 Node    *m_prev;
 T       m_payload;
};

  //Push Back ////////////////////////////////////////////////
  void PushBack(const T &t) {
      Node * Temp = new Node(t);


      if(IsEmpty()){
            cout << "is Empty" << endl;
              m_head = Temp;

              m_tail = Temp;

      }
      else{
            Node * Curr = m_tail;

            Curr->m_next = Temp;

            Temp->m_prev = Curr;

            m_tail = Temp;


      }

      size += 1;

 }


//Get a pointer to the first node in the list
const Node *Begin() const {}
Node *Begin() {
       cout << "m_head " << m_head << endl;
       return m_head;
} 


//get a pointer to the last node in the list
const Node *End() const {}

Node *End() {
       cout << "m_tail " << m_tail << endl;
 return m_tail;
}

private:


Node    *m_head, *m_tail;             // Head node
unsigned size;



};

};

并最终从驱动程序输出

m_tail 0x2068030
End Ref: 0x2068030
m_head 0x2068010
begin ref: 0x2068010
m_tail 0x2068030
0x2068030
Copy
Start; 0x7fff7745d240
End; 0x7fff7745d240
b.Begin() : 0x7fff7745d240
b.End()   : 0x7fff7745d240
Start->data() loop: 2
Segmentation fault  //don't care about this right now
4

1 回答 1

0

你忘了初始化size

于 2013-02-06T19:37:01.900 回答