C++ Operator überladen

Dasun

Lieutenant
Registriert
Aug. 2012
Beiträge
846
Abend,

ich hab hier ein paar Probleme mit einem code, den ich gerade am Schreiben bin. Es geht darum in eine Templateklasse einen Vektor zu kapseln. Dabei will bei mir die Überladung eines Operators nicht funktionieren (Fehlermeldung: Binärer Operator '+' hat zu viele Parameter).

#include <math.h>
#include <iostream>

template<typename T, int dim>
class Vector
{
private:
T vec[dim];
public:
Vector(){
T zero = 0;
for(int i = 0;i <= dim -1;i++){
vec = zero;
}
}

T& operator[](int index){
return vec[index];
}

Vector Vector::operator+(Vector const laddv, Vector const raddv){
T resvec[dim];
for(int i = 0;i <= dim -1;i++){
resvec = laddv + raddv;
}

return resvec;

}
};


int main()
{
typedef Vector<float, 3> Vector;
Vector f, g;
f[0] = 1.0f; f[1] = 2.0f; f[2] = 3.0f;
g[0] = 3.0f; g[1] = 2.0f; g[2] = 1.0f;

Vector h = f + g;

return 0;
}

Kann mir jemand einen Tip geben, wo der Fehler ist ?

Danke im vorraus.
 
Das "Vector::" ist an der Stelle falsch, da du die Funktion ja nicht außerhalb der Klasse implementierst.

Richtig ist also: Vector operator+(...), genau wie du es korrekt beim []-Operator gemacht hast.

Edit: Entschuldige bitte meinen ersten Post, natürlich liegt der eigentliche Fehler darin, dass der + Operator natürlich nur 1 Parameter nimmt. Wenn du also f + g schreibst, wird für Instanz f die Funktion f.operator+(g) aufgerufen. Außerdem wolltest du einen Vector zurückgeben, hattest resvec allerdings als T deklariert.

Korrekt ist also:

Vector operator+(Vector other){
Vector<T, dim> resvec;
for(int i = 0;i <= dim -1;i++){
resvec = vec + other;
}
 
Zuletzt bearbeitet:
Ah, ich denke, ich habe nun verstanden, wie es funktioniert.

Ich danke dir herzlichst für die schnelle Hilfe und die gute Erklärung :)
 
Zurück
Oben