템플릿 중첩 클래스 프렌드 함수를 외부에서 정의하는 방법?
글쓴이: 익명 사용자 / 작성시간: 화, 2021/06/01 - 12:54오전
template <typename T> class Vector { public: Vector(int _capacity = 0); Vector(const Vector &input); Vector &operator=(const Vector &input); ~Vector(); class Iterator { public: Iterator(); T &operator*() const; Iterator operator+(int num) const; Iterator operator-(int num) const; Iterator &operator+=(int _num); Iterator &operator-=(int _num); int operator-(const Iterator &_it) const; Iterator &operator=(const Iterator &_it); friend typename Vector<T>::Iterator operator+(int num, const typename Vector<T>::Iterator &_it); Iterator &operator++(); Iterator operator++(int); Iterator &operator--(); Iterator operator--(int); bool operator==(const Iterator &_it) const; bool operator!=(const Iterator &_it) const; bool operator>(const Iterator &_it) const; bool operator>=(const Iterator &_it) const; bool operator<(const Iterator &_it) const; bool operator<=(const Iterator &_it) const; private: Iterator(const Vector *_vector, unsigned int _index); const Vector *vector; unsigned int index; friend class Vector; }; Iterator begin() const; Iterator end() const; bool empty() const; int size() const; int capacity() const; void resize(int _size, const T &val = 0); void reserve(int _capacity); void assign(const Iterator &start, const Iterator &end); void assign(int _size, const T &val); void insert(int index, const T &val); void push_back(const T &val); T pop_back(); T &at(int index) const; T &operator[](int index) const; T &front() const; T &back() const; void erase(int index); void clear(); private: T *vec; unsigned int vecSize; unsigned int vecCapacity; }; template <typename T> inline typename Vector<T>::Iterator operator+(int num, const typename Vector<T>::Iterator &input) { return Iterator(input.iter + num); }
위와 같은 코드를 짯는데...
"message": "friend declaration ‘Vector::Iterator operator+(int, const Vector::Iterator&)’ declares a non-template function [-Wnon-template-friend]"
과 같은 경고를 출력하고 되지를 않내요... 혹시 해결방법좀 아시는분 계실까요....
Forums:
댓글 달기