Witam,
Mam pewien problem z przeciążeniami operatorów m.in. operator+. Poniżej załączam kod:
//Dodawanie (wektor + wektor)
Wektor& operator+ (Wektor &w){
Wektor v(*this);
if(checkDimensions(w) != 0) return;
else{
for(int i = 0; i < size; ++i){
v[i]=(*this)[i]+w[i];
}
}
return v;
}
Oto co mi wywala g++ (kompiluje na linuxie):
mws.cpp: In member function ‘Wektor& Wektor::operator+(Wektor&)’:
mws.cpp:25:35: error: return-statement with no value, in function returning ‘Wektor&’
mws.cpp:24:15: warning: reference to local variable ‘v’ returned
mws.cpp: In function ‘int main()’:
mws.cpp:274:25: error: cannot convert ‘Wektor’ to ‘Wektor*’ in initialization
I jeszcze w razie czego:
a)w funkcji main():
int tabVec1[5] = {1,2,3,4,5};
int tabVec2[5] = {6,7,8,9,10};
Wektor *vec1 = new Wektor(5,tabVec1);
Wektor *vec2 = new Wektor(5,tabVec2);
vec1->Vname='A';
vec2->Vname='B';
cout<<"Wektor1 + Wektor2"<<endl;
Wektor *vec3 = *vec1+*vec2;
b)Konstruktor:
//Konstruktor
Wektor(int k=3, int *values=NULL){
int *wektor = new int[k];
if(values == NULL){
for(int i = 0; i < k; i++){
wektor[i] = 0;
}
}
else{
for(int i = 0; i < k; i++){
wektor[i] = values[i];
}
}
size = k;
vectorAddr = wektor;
}
Czy ktoś mógłby mi wytłumaczyć te przeciążania i zwracanie wskaźników?
Szukałem w necie podobne materiały i się zdziwiłem, że dla operator+() przekazują 2 argumenty, a nie jeden co u mniew g++ jest nie dozwolone! Czy w środowisku kompilatorów rzeczywiście istnieją takie rozbieżności?!