当我尝试在抽象类中使用复制和交换习语时遇到了一个有趣的错误。下面的代码是专门为了演示这种情况而创建的,如果有什么不妥的地方,告诉我但不要关注:
template <typename T> class iter
{
public:
iter();
virtual ~iter();
iter(const iter &);
iter(iter &&) noexcept;
iter& operator=(iter);
virtual void swap(iter &);
virtual bool operator!=(const iter&);
virtual bool operator==(const iter&);
virtual bool operator++() = 0;
virtual bool operator--() = 0;
private:
T* pointer;
};
错误信息是:
iterator.h:10:18: error: cannot declare parameter to be of abstract type 'iter<T>'
iter& operator=(iter);
^
iterator.h:3:28: note: because the following virtual functions are pure within 'tier':
iterator.h:15:15: note: virtual bool iter<T>::operator++()
virtual bool operator++() = 0;
^
iterator.h:16:15: note: virtual bool iter<T>::operator--()
virtual bool operator--() = 0;
显然是这条线导致了这个错误,所以我必须在派生类而不是在这里声明它,还是有任何其他高级技术?
iter& operator=(iter);