Salve a tutti, vi posto quà di seguito il codice di un programmino d'esempio per spiegare il mio problema:
codice:
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
struct punto {double x, y;};
class poligono
{ int nvertici; punto* pp;
public:
poligono();
poligono (int n, const punto v[]);
~poligono();
poligono(const poligono& pol);
};
poligono::poligono()
{
nvertici = 1; pp = new punto[nvertici];
}
poligono::poligono(int n, const punto v[])
{
nvertici = n;
pp = new punto[nvertici];
for (int i=0; i<nvertici; i++)
{
(pp+i)->x = v[i].x;
(pp+i)->y = v[i].y;
}
}
poligono::~poligono()
{
delete[] pp;
}
poligono::poligono(const poligono& pol)
{
cout<< "costruttore di copia\n";
nvertici = pol.nvertici;
pp = new punto[nvertici];
for (int i= 0; i < nvertici; i++)
{
(pp+i)->x = (pol.pp+i)->x;
(pp+i)->y = (pol.pp+i)->y;
}
}
int main()
{
punto cc[3];
poligono bz();
poligono test = bz; // errore a tempo di compilazione "conversion from poligono()() to non-scalar type poligono requested
poligono test2 = poligono(3, cc);
system("PAUSE");
return EXIT_SUCCESS;
}
Nel main ho aggiunto i commenti alle righe che non mi quadrano, innanzitutto l'inizializzazione dell'ogetto "test" di tipo "poligono" con l'ogetto "bz" sempre di tipo "poligono",non capisco proprio perchè mi esca fuori quell'errore quando compilo.
Secondo cosa che non mi spiego, perchè quando inizializzo l'ogetto di tipo "poligono" test2 con il costruttore "poligono(3, cc)" non viene richamato il costruttore di copia? Da quello che so in quel caso dovrebbe intervenire proprio il costruttore di copia che ho ridefinito, però se mando in esecuzione l'exe non mi esce il cout del costruttore di copia.
Sapreste darmi qualche dritta?