Urizen
02-01-2006, 11:14
template<class x, class y>
class A{
private:
class B;
class C{
public:
C(B*);
C(const C&);
~C();
C& operator=(const C&);
B& operator*() const;
B* operator->() const;
bool operator==(C) const;
bool operator!=(C) const;
B* puntatore;
};
class B{
public:
B(x, C);
x info;
C next;
list<y>* v;
int rif;
};
C aux;
public:
A();
~A();
};
template <class x, class y>
A<x, y>::A::~A(){ ~aux();};
template <class x, class y>
A<x, y>::A::C::~C()
{if (puntatore)
{puntatore->rif--;
if (puntatore->rif==0)
{delete puntatore;} // delete std di B che richiama ricorsivamente
} // il distruttore di C
};
main(){
A<int, int> primo;
~primo();
}
il mio problema è il distruttore del template di classe A:
quando compilo, mi viene ritornato un errore per il seguente codice:
A<x, y>::A::~A(){ ~aux();};
dicendo:
error: no match for call to '(A<int,int>::C) ()'
in teoria il distruttore del template di classe A mi deve distruggere il suo unico
campo dati (aux) mediante l'istruzione ~aux() usando il distruttore per oggetti
di tipo C che ho definito ... quindi non dovrebbero esserci problemi ... invece ....
chi mi da qualche suggerimento ???
ringrazio in anticipo ...
class A{
private:
class B;
class C{
public:
C(B*);
C(const C&);
~C();
C& operator=(const C&);
B& operator*() const;
B* operator->() const;
bool operator==(C) const;
bool operator!=(C) const;
B* puntatore;
};
class B{
public:
B(x, C);
x info;
C next;
list<y>* v;
int rif;
};
C aux;
public:
A();
~A();
};
template <class x, class y>
A<x, y>::A::~A(){ ~aux();};
template <class x, class y>
A<x, y>::A::C::~C()
{if (puntatore)
{puntatore->rif--;
if (puntatore->rif==0)
{delete puntatore;} // delete std di B che richiama ricorsivamente
} // il distruttore di C
};
main(){
A<int, int> primo;
~primo();
}
il mio problema è il distruttore del template di classe A:
quando compilo, mi viene ritornato un errore per il seguente codice:
A<x, y>::A::~A(){ ~aux();};
dicendo:
error: no match for call to '(A<int,int>::C) ()'
in teoria il distruttore del template di classe A mi deve distruggere il suo unico
campo dati (aux) mediante l'istruzione ~aux() usando il distruttore per oggetti
di tipo C che ho definito ... quindi non dovrebbero esserci problemi ... invece ....
chi mi da qualche suggerimento ???
ringrazio in anticipo ...