Non controlli se si esce o no dai limiti dell' array di booleani:
codice:
template<class tipoelem>
void insiemev<tipoelem>::unione(insiemev<tipoelem> &A, insiemev<tipoelem> &B)
{
int max=A.dimset;
if(max<B.dimset)
max=B.dimset;
for(int i = 0; i < max; i++)
{
if(i<A.dimset)
if(A.appartiene(i))
this->inserisci(i);
if(i<B.dimset)
if(B.appartiene(i))
this->inserisci(i);
}
}
E non ti ha dato segmentation fault per caso.Per cui se l' array di booleani di B era composto da 5 campi, ha letto anche quelli oltre.E per caso ce ne erano alcuni che sono stati letti come veri.
Ma potevi semplicemente risolvere con un:
codice:
template<class tipoelem>
bool insiemev<tipoelem>::appartiene(tipoelem elem)
{
bool result=elem<dimset;
if(result)
result=set[elem];
return result;
}
Però c'è da dire che al posto del metodo unione avresti potuto implementare l' operatore | , e che avendo realizzato questa classe con i template, ti da errore se tipoelem=string, visto che un valore come "ciao" non è un indice valido dell' array set.