Buongiorno a tutti,
sto costruendo una classe
myvec , che è sostanzialmente la solita classe vettore con l'aggiunta del calcolo della norma e dell'operator overloading, però ho difficoltà con l'overloading dell'operatore +.
Più precisamente: nella dichiarazione della classe ho scritto
myvec& operator+(const myvec& v, const myvec& w);
e nella definizione ho scritto (non ho messo nessun check sulle dimensioni per verificare la compatbilità delle operazioni perché era solo un test)
myvec& myvec::operator+(const myvec& v, const myvec& w){
int d = v.size();
myvec x(d);
for(int i=0;i<d;i++){
x(i)=v(i)+w(i);
}
return x;
}
Compilando il codice, ottengo il seguente errore:
testmyvec.cpp.cc:77:59: error: ‘myvec& myvec::operator+(const myvec&, const myvec&)’ must take either zero or one argument
che non riesco a capire sinceramente.
Per completezza, allego il codice completo con il main. Compila solamente se la definizione e la dichiarazione dell'overloading + sono commentate.
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
class myvec{
private:
int dimension;
double *data;
public:
myvec(int dim);
myvec(const myvec &v);
~myvec();
int size() const;
void normalize(); //normalizza il vettore
void filling(); //riempi il vettore con indici consecutivi
double norm_l2();
void Print();
double& operator()(int i);
myvec& operator=(const myvec& v);
myvec& operator+(const myvec& v, const myvec& w);
};
myvec::myvec(int dim){
dimension = dim;
data = new double[dim];
for(int i=0;i<dimension;i++){
data[i] = 0.0;
}
}
myvec::myvec(const myvec& v){
int dimensione = v.size();
data = new double[dimensione];
for(int i=0;i<dimensione;i++){
data[i] = v.data[i];
}
}
myvec::~myvec(){ //destructor
dimension = 0;
delete[] data;
data = NULL;
}
int myvec::size() const{
return dimension;
}
double& myvec::operator()(int i){
return data[i];
}
myvec& myvec::operator=(const myvec& v){
int dim = v.size();
for (int i = 0; i < dim; ++i){
data[i] = v.data[i];
}
return *this;
}
myvec& myvec::operator+(const myvec& v, const myvec& w){
int d = v.size();
myvec x(10);
for(int i=0;i<d;i++){
x(i)=v(i)+w(i);
}
return x;
}
void myvec::normalize(){
double temp = 1.0/norm_l2();
for(int i =0 ;i<dimension;i++){
data[i] = data[i]*temp;
}
}
void myvec::filling(){
for (int i=0;i<dimension;i++){
data[i] = i+1;
}
}
double myvec::norm_l2(){
double norm = 0.0;
for (int i=0;i<dimension;i++){
norm += data[i]*data[i];
}
return sqrt(norm);
}
void myvec::Print(){
for(int i=0;i<dimension;i++){
cout << data[i]<<endl;
}
}
int main(int argc, char**argv) {
myvec vett1(10);
vett1(3) = 6.0;
vett1(8) = 9.0;
myvec vett2(10);
vett2(4) = 2.0;
myvec sum(10);
myvec vett3(10);
vett3 = vett2; //check operatore =
vett3.Print();
//SOMMA
//myvec sum(10);
//sum = myvec + myvec2; //check operatore +
return 0;
}
Grazie a chiunque possa darmi una mano!