Buonasera,
devo fare un esercizio del manuale c++ su cui sto studiando, mi chiede di creare un template per una classe creata in un esercizio precedente.
La classe prevede la ridefinizione di tutti gli operatori, quelli aritmetici e quelli di confronto.
La classe singola funziona bene, quando però ho fatto il template il compilatore sono arrivati i problemi.... perche nel programma di verifica non riesco a gestire 2 istanze di classe per tipi diversi.... mi da errore subito senza via di scampo
Sotto riporto la versione semplificata del template di classe che ho rifatto, per semplicità, con solo l'overload dell'operatore ==
E' 3 giorni che mi spacco il cervello.... qualche anima pia che mi spiega dove erro e come risolvere???
intestazione.h
#include<iostream>
template<class T, int MAX>
class Elenco
{
public:
Elenco();
~Elenco();
void stampa();
bool operator==(const Elenco<T, MAX>&) const;
private:
int elementi;
T *ptr;
};
origine.cpp
#include"Intestazione.h"
#include<iostream>
#include<ctime>
using namespace std;
template<class T, int MAX>
Elenco<T, MAX>::Elenco()
{
elementi = MAX;
ptr = new T[MAX];
for (int i = 0; i < elementi; i++)
{
ptr[i] = rand() % 100;
}
}
template<class T, int MAX>
Elenco<T, MAX>::~Elenco()
{
delete[] ptr;
}
template<class T, int MAX>
void Elenco<T, MAX>::stampa()
{
for (int i = 0; i < elementi; i++)
{
cout << ptr[i] << " ";
if ((i + 1) % 4 == 0) cout << endl;
}
cout << "\nfine";
}
template<class T, int MAX>
bool Elenco<T, MAX>::operator==(const Elenco<T, MAX > &right) const
{
if (sizeof (*this) == sizeof (right)) return true;
else return false;
}
int main()
{
srand((unsigned int)time(0));
Elenco<char, 10> elenco1;
Elenco<int, 10> elenco2;
Elenco<int, 11>elenco3;
elenco2.stampa();
cout << endl<<endl;
elenco3.stampa();
cout << endl<<"i template sono di tipo ";
if (elenco2 == elenco3) cout << "uguale"; //QUI HO L'ERRORE SUL CONFRONTO DI ISTANZA DI TIPO DIVERSO
else cout << "diverso";
cout << endl << "i template sono di tipo ";
if (elenco1 == elenco2) cout << "uguale"; /QUI HO L'ERRORE SUL CONFRONTO DI ISTANZA DI TIPO DIVERSO
else cout << "diverso";
cout << endl << endl;
return 0;
}
Quando vado a compilare mi da questi errori nel file origine.cpp
Errore C2678 '==' binario: non è stato trovato alcun operatore che accetti un operando sinistro di tipo 'Elenco<int,10>'. È anche possibile che non vi siano conversioni accettabili. Project1 d:\sandro\documenti\c++\esercizi libro\cap 1 template\prove\template di classe\project1\origine.cpp
Errore (attivo) E0349 nessun operatore "==" corrispondente agli operandi Project1 D:\Sandro\Documenti\C++\esercizi libro\cap 1 template\prove\template di classe\Project1\Origine.cpp