gpt4 book ai didi

c++ - 在模板类之外定义方法

转载 作者:行者123 更新时间:2023-11-28 05:29:12 25 4
gpt4 key购买 nike

<分区>

我正在编写一个简单的链表并且一切正常,但是在类外定义方法时我遇到了一些我无法理解的问题。如果我在类内部定义该方法,它会完美运行,当我声明该方法并尝试在类外部定义它时,我会遇到编译错误...

下面是正常运行时的代码:

#ifndef LINKEDLIST__H_
#define LINKEDLIST__H_
#pragma warning (disable: 4290)
#include "Item.h"
template<class T> class LinkedList
{
Item<T>* head;
Item<T>* tail;
public:
LinkedList(): head(new Item<T>()), tail(new Item<T>())
{
head->setNext(tail);
tail->setPrev(head);
}
~LinkedList() { delete head; } // how does that work?

class Iterator // Nested class.
{
Item<T>* p;
friend class LinkedList<T>;
public:
Iterator(Item<T>* pt = 0) : p(pt) {}
int operator!=(Iterator itr) const // Operator !=
{
return (p != itr.p);
}
Iterator& operator++(int) throw(char*) // Operator ++ (postfix)
{
if (p == NULL)
throw "null pointer in list::iterator";
p = p->getNext();
return *this;
}
Iterator& operator--(int) throw (char*) // Operator -- (postfix)
{
if (p == NULL)
throw "null pointer in list::iterator";
p = p->getPrev();
return *this;
}
T& operator*() throw (char*) // Operator *
{
if (p == NULL || p->getData() == NULL)
throw "null pointer in list::iterator";
return *(p->getData());
}
}; // End of class Iterator scope.
Iterator begin() { return head->getNext(); }
Iterator end() { return tail; }
Iterator insert(Iterator itr, const T& data)
{
// create a copy of data
Item<T>* pNewItem = new Item<T>(new T(data));
// connect
pNewItem->setNext(itr.p);
pNewItem->setPrev(itr.p->getPrev());
itr.p->getPrev()->setNext(pNewItem);
itr.p->setPrev(pNewItem);
return pNewItem;
}
Iterator erase(Iterator itr);
}; // End of class LinkedList scope.
#endif // !LINKEDLIST__H_

当我尝试在类外部实现插入方法时:(顺便说一下,这是 VS2015 自动执行此操作的方式,并且由于静态绑定(bind),它是在头文件中定义的)此代码不起作用,它会导致编译错误:

template<class T>
inline Iterator LinkedList<T>::insert(Iterator itr, const T & data)
{
// create a copy of data
Item<T>* pNewItem = new Item<T>(new T(data));
// connect
pNewItem->setNext(itr.p);
pNewItem->setPrev(itr.p->getPrev());
itr.p->getPrev()->setNext(pNewItem);
itr.p->setPrev(pNewItem);
return pNewItem;
}

在类外定义方法:(编译错误) enter image description here

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com