Probleme mit Überladen von dem operator+
-
Hallo an alle,
programmiere für die Uni ein Programm in C++, das Vectoren addieren soll.
Habe bereits den [] Operator überladen, damit man auf die Elemente von Vectoren zugreifen kann und sie verändern kann.
Leider bekomme ich bei Überladen von dem operator+ folgende Fehler:Fehler 1 error C2804: Binärer Operator '+' hat zu viele Parameter
Fehler 2 error C2333: 'Vector<T,dim>::operator +': Fehler in Funktionsdeklaration; Funktionstext wird übersprungen
Fehler 3 error C2804: Binärer Operator '+' hat zu viele Parameter
Fehler 4 error C2333: 'Vector<T,dim>::operator +': Fehler in Funktionsdeklaration; Funktionstext wird übersprungenIch rufe den Operator so:
Vector f, g, h; h.(f,g);Mein Code:
void operator+ (Vector vecA, Vector vecB) { T zahl1, zahl2, zahl3; for(int i = 0; i < dim; i++) { zahl1 = vecA[i]; zahl2 = vecB[i]; zahl3 = zahl1 + zahl2; vector[i] = zahl3; } }LG, Witness

-
Wenn der operator+ ein Member der Klasse ist, benötigt er nur einen Parameter.
-
Hallo Witness,
Willkommen im C++-Forum.
Ich vermute, Du hast bei der Deklaration des operator+ das Zauberwort friend vergessen und den Returntyp - also etwa so:
template< typename T, std::size_t dim > class Vector { public: // ... irgendwelche Methoden friend Vector operator+( const Vector& vecA, const Vector& vecB ) { Vector vector; // das (spätere) Ergebnis // ähnlich wie unten return vector; } // usw.außerdem ist zu empfehlen diese Parameter als const Reference zu übergeben.
Gruß
Werner
-
also, ich habe grade eben noch so probiert
Vector operator+(const Vector &vec) { Vector tmp(dim); for(size_t i=0;i<dim;++i) tmp[i]=(*this)[i]+vec[i]; return tmp; }mit dem Aufruf:
h = g.operator+(f);er hat folgende Fehler geworfen:
Fehler 1 error C2664: 'Vector<T,dim>::Vector(const Vector<T,dim> &)': Konvertierung des Parameters 1 von 'const int' in 'const Vector<T,dim> &' nicht möglich
Fehler 2 error C2678: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const Vector<T,dim>' akzeptiert (oder keine geeignete Konvertierung möglich)
Fehler 3 error C2678: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const Vector<T,dim>' akzeptiert (oder keine geeignete Konvertierung möglich)
-
@Werner Salomon:
Habe auch so probiert:
mit dem Aufruf:h = operator+(f, g);friend Vector operator+(const Vector& vecA, const Vector& vecB){ Vector v[dim]; for(int i = 0; i < dim; i++) { v[i] = vecA[i] + vecB[i]; } return v; }So wirft er nur sieben Fehler:
Fehler 1 error C2678: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const Vector<T,dim>' akzeptiert (oder keine geeignete Konvertierung möglich)Fehler 2 error C2678: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const Vector<T,dim>' akzeptiert (oder keine geeignete Konvertierung möglich)
Fehler 3 error C2664: 'Vector<T,dim>::Vector(const Vector<T,dim> &)': Konvertierung des Parameters 1 von 'Vector<T,dim> [3]' in 'const Vector<T,dim> &' nicht möglich
4 IntelliSense: Die Argumentliste für "Klassenvorlage "Vector"" fehlt.
5 IntelliSense: Der Bezeichner ""dim"" ist nicht definiert.
6 IntelliSense: Kein "[]"-Operator stimmt mit diesen Operanden überein.
7 IntelliSense: Kein "[]"-Operator stimmt mit diesen Operanden überein.
-
#include <iostream> #include <string> using namespace std; template<class T, int dim> class Vector { public: typedef size_t size_type; T vector[dim]; Vector() { for(int i = 0; i < dim;i++) { vector[i] = 0; } } T& operator[] (int i) { return vector[i]; } /*Vector operator+(const Vector &vec) { Vector tmp(dim); for(size_t i=0;i<dim;++i) tmp[i]=(*this)[i]+vec[i]; return tmp; }*/ friend Vector operator+(const Vector& vecA, const Vector& vecB){ Vector v[dim]; for(int i = 0; i < dim; i++) { v[i] = vecA[i] + vecB[i]; } return v; } int length() { return dim; } void print() { cout << length(vector)<< endl; } }; void main() { typedef Vector<float, 3> Vector; Vector f, g, h; for(int i = 0; i < 3;i++) { cout << f[i] << " "; } cout << endl; f[0] = 1.0f; f[1] = 2.0f; f[2] = 3.0f; for(int i = 0; i < 3; i++) { cout << f[i] << " "; } cout << endl; g[0] = 3.0f; g[1] = 2.0f; g[2] = 1.0f; for(int i = 0; i < 3; i++) { cout << g[i] << " "; } cout << endl; // Addition //h.operator+(f, g); h = operator+(f, g); /*for(int i = 0; i < 3; i++) { cout << h[i] << " "; }*/ cout << endl; }
-
friend Vector operator+(const Vector& vecA, const Vector& vecB) { Vector v; // <- keine Klammerung - keine Dimension angeben for(int i = 0; i < dim; i++) { v[i] = vecA[i] + vecB[i]; } return v; }