provo a progettare un modello per il mio progetto universitario. ho scritto il codice follwing:template class 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);
questo Templete utilizza la classe di collegamento 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'
Non capisco qual è il problema. Posso davvero usare il tuo aiuto voi :)
scusate ma non capisco cosa ho bisogno di rinominare e perché? –
@inna karpasas: vedere la mia modifica. –
Considerate anche la possibilità di cambiare la funzione di template 'friend' per un' amico' semplice non basato su modelli. Non hai bisogno (né vuoi) di fornire l'accesso ai tuoi interni di classe (in questo caso 'LinkedList ' per un particolare tipo' A') a tutte le istanze di un operatore di modelli << '. Hai solo bisogno dell'operatore << (ostream &, const LinkedList &) 'per accedere alla classe. Si noti che 'A' è * generale * per la discussione, ma questo non è un segnaposto, ma un tipo particolare (' int', o 'double', ma uno concreto) –