Buongiorno, sto cercando di riscrivere nel mio codice le operazioni aritmiche per array.
Vorrei riscrivere la moltiplicazione dell'array per una costante/variabile, ma non riesco a risolvere gli errori in fase di compilazione.
Allego qui la mia classe:
template <typename T>
class multivec1D {
int _n1;
unique_ptr<T[]> data;
public:
multivec1D(){ }
multivec1D(int n1): _n1(n1) {
data= make_unique<T[]>(_n1);
}
void resize(int n1) {
_n1=n1;
data= make_unique<T[]>(_n1);
}
int n1() const { return _n1; }
T &operator[](int i) {return data; }
friend multivec1D<T> operator*( multivec1D<T>& e, T x)
{
multivec1D<T> temp(e.n1());
for(int i=0; i<e.n1(); i++) temp.data = e.data*x ;
return temp;
}
};
Al momento di compilare questo è l'errore che vedo:
error: function "multivec1D<T>::multivec1D(const multivec1D<double> &) [with T=double]" (declared implicitly) cannot be referenced -- it is a deleted function
return temp;
^
detected during instantiation of class "multivec1D<T> [with T=double]" at line 26 of "try.cpp"
su questo codice
int main()
{
multivec1D<double> A1(3); A1.fill(1.);
multivec1D<double> A2(3); A2.fill(2.);
double a = 1.;
A1 = A2*a;
for(int i=0; i<A1.n1(); i++) cout << A1;
cout << endl;
}
(la line 26 è A1 = A2*a;)
A cosa è dovuto questo errore? ho definito la sottrazione in questo modo
multivec1D<T> operator-(multivec1D<T>& v)
{
if(this->n1()!= v.n1())
{
printf("inconsistency when using - in multivec1D!! revise");
exit(1);
}
multivec1D<T> temp(this->n1());
for(int i=0; i<this->n1(); i++) temp = this->data - v.data;
return temp;
}
e non ho nessun problema a compilare.