CList と呼ばれる循環リスト用のカスタム クラスを作成しています。私はかなり前に完了した宿題に基づいて、たくさんのコピペをしたので、私が作品を書いてきたすべてを正確に覚えているわけではありません.
とにかく、単に .h ファイルをインクルードしようとすると、using namespace std 行でエラーが発生します。
main.cpp:11: error: expected unqualified-id before ';' token
私のコード内の関数を指している2つのエラーと同様に:
In file included from main.cpp:9:
CList.h:119: error: non-template 'CIterator' used as template
CList.h:119: note: use 'CList<T>::template CIterator' to indicate that it is a template
これは問題の機能です:
template <class T>
typename CList<T>::CIterator<T> CList<T>::push(T const& v)
{
size++;
Node<T>* p = new Node<T>(v);
if (this -> size_ == 1)
{
head = p;
tail = p;
p -> next = p;
p -> prev = p;
}
else
{
tail -> next = p;
p -> next = head;
p -> prev = tail;
head -> prev = p;
tail = p;
}
return CIterator(p);
}
ここでのエラーの意味がよくわかりません。関数に CList の CIterator を返すように指示しており、この関数が CList クラスの一部であることを示しています。行を読むとそれがわかる
typename CList<T>::CIterator<T> CList<T>::push(T const& v)
明らかに T がテンプレートであるのに、なぜ CIterator がテンプレートであると考えるのですか? 私はただ混乱しています。