-3

コピーコンストラクターの作成に問題があります。以下のコードを検討してください。

List.hで

template <class T>
struct ListNode
{
    T value;
    ListNode<T> *next;
    ListNode<T> *prev;

    ListNode(T theVal)
    {
        this->value = theVal;
        this->next = NULL;
        this->prev = NULL;
    }
};

template <class T>
class List
{
    ListNode<T> *head;

public:
    List();
    List(const List<T>& otherList); // Copy Constructor.
    ~List();
    };

list.cppで

template <class T>
List<T>::List()
{
    head=NULL;
}
template <class T>
List<T>::~List()
{
}
template <class T>
List<T>::List(const List<T>& otherList)
{
}

//問題をグーグルで検索しました。コンセプトはシンプルです。新しいヘッドを作成し、そのノードに//古いリストノードの値を割り当てます。//それで私は以下を試しました。

ListNode<T> *old = head; // pointer to old list.
ListNode<T> *new;// pointer to new head.

while (old->next!=NULL){
new->value = old->value;
old = old->next; 
}

//唯一の問題は、新しいコピーリストを指す新しいヘッドを作成する方法です。

4

1 に答える 1

1

この質問全体は不明確であり、コードには、コピー割り当て演算子ではなく、役に立たないデストラクタなど、多くの問題があります。

通常、ファイルでテンプレートを定義することはできません.cpp。テンプレート定義全体がコードのすべてのユーザーに表示される必要があります。つまり、通常、ヘッダーファイルでテンプレート全体を定義する必要があります。

ListNode<T> *new;// pointer to new head.

newはC++のキーワードであるため、変数名には使用できません。

//唯一の問題は、新しいコピーリストを指す新しいヘッドを作成する方法です。

コピーされたリストは何ですか?実際には何もコピーしたり、新しいノードを作成したりしていません。

でノードのコピーを作成する必要がありますotherList

template <class T>
List<T>::List(const List<T>& otherList)
{
  ListNode<T>* node = otherList.head;
  ListNode<T>** tail = &head;
  while (node)
  {
    *tail = new ListNode<T>(node->value);
    tail = &tail->next;
    node = node->next;
  }
}
于 2013-02-09T15:58:58.770 に答える