私は大学のプロジェクト用のテンプレートを設計しようとしています。テンプレートクラスC++
#ifndef _LinkedList_H_
#define _LinkedList_H_
#include "Link.h"
#include <ostream>
template <class L>//error one
class LinkedList
{
private:
Link<L> *pm_head;
Link<L> * pm_tail;
int m_numOfElements;
Link<L>* FindLink(L * dataToFind);
public:
LinkedList();
~LinkedList();
int GetNumOfElements(){return m_numOfElements;}
bool Add(L * data);
L *FindData(L * data);
template <class L> friend ostream & operator<<(ostream& os,const LinkedList<L> listToprint);//error two
L* GetDataOnTop();
bool RemoveFromHead();
L* Remove(L * toRemove);
このtempleteは私がいけない
#ifndef _Link_H_
#define _Link_H_
template <class T>//error 3
class Link
{
private:
T* m_data;
Link* m_next;
Link* m_prev;
public:
Link(T* data);
~Link(void);
bool Link::operator ==(const Link& other)const;
/*getters*/
Link* GetNext()const {return m_next;}
Link* GetPrev()const {return m_prev;}
T* GetData()const {return m_data;}
//setters
void SetNext(Link* next) {m_next = next;}
void SetPrev(Link* prev) {m_prev = prev;}
void SetData(T* data) {m_data = data;}
};
error one: shadows template parm `class L'
error two:declaration of `class L'
error three: shadows template parm `class T'
が問題であるかを理解templeteリンククラスを使用しています。私はfollwingコードを書きました。私は本当に はあなたに感謝あなたの助けを使用することができます:)
申し訳ありませんが、名前を変更する必要がある理由とその理由を理解できません。 –
@inna karpasas:私の編集を参照してください。 –
テンプレート化されていない 'friend'の' friend'テンプレート関数を変更することも検討してください。テンプレート化された 'operator <<'のすべてのインスタンス化に対してクラス内部(この場合は 'LinkedList ')にアクセスする必要はありません。クラスにアクセスするには 'operator <<(ostream&、const LinkedList &)'のみが必要です。 'A'は議論のための一般的なものですが、これはプレースホルダーではなく、特定の型(' int'または 'double')ですが、具体的なものです。 –