2012-03-29 19 views
1

Ich versuche, den * Operator zu überladen, um zwei Objekte zu multiplizieren (Punktprodukt). Diese Objekte können Point3D, Vector3D oder Normal sein. Sie alle haben grundsätzlich die gleiche Struktur (einen x-, y- und z-Wert), ich habe sie nur für die Semantik aufgeteilt.Operator in C++ überladen

Die Linie, die mir Mühe geben wird, ist dies:

float t = (point - r.origin)*normal/(r.direction * normal); 

Hier Punkt und r.origin sind ein Point3D, normal ein Normal und r.direction ist ein Vector3D. In den Header-Dateien für diese Klassen habe ich die folgenden Überlastfunktionen:

In Vector3D.h:

Vector3D operator *(Normal& n); 

In Point3D.h:

Point3D operator -(Point3D& p); 
Point3D operator *(Normal& n); 

Der Fehler ich erhalte, ist:

Angenommen, ich habe die Funktionen in der .cpp-Datei korrekt ausgefüllt, gibt es etwas Dummes, das ich getan habe Hier? Ignoriere auch die Tatsache, dass es noch keinen Divisionsoperator gibt ... Es ist in der Pipeline!

Prost

Antwort

5

Möglicherweise haben Sie die unären Versionen anstelle der binären Versionen definiert. (Haben Sie sie innerhalb der Klasse {...} definiert?)

Oder Sie haben sie nicht als const definiert. Versuchen Sie folgendes:

Vector3D operator *(const Normal& n) const; 
Point3D operator -(const Point3D& p) const; 
Point3D operator *(const Normal& n) const; 

Für binäre Funktionen über hetrogeneous Parameter wie dies finde ich es viel einfacher, sie alle zusammen im globalen Bereich in einer separaten Datei/Ort und Freund sie aus den Klassen zu definieren.

2

Ihr this erscheint wie es const sein könnte (nur Raten von der Fehlermeldung, da Sie diesen Code in Ihrer Frage nicht enthalten haben). Versuchen Sie:

Vector3D operator *(const Normal& n); 

Point3D operator -(const Point3D& p); 
Point3D operator *(const Normal& n); 
+0

Prost für die Hilfe, aber sie alle in const zu ändern gibt mir 'disqualifiziert Qualifiers' Fehler. Sorry, ich habe gestern nur mit C++ begonnen:/ –

+1

Vielleicht könnten Sie uns ein [* complete * Beispiel] (http://sscce.org) geben, das Ihr Problem aufzeigt. Wir können nur raten, wie der Rest Ihres Codes aussieht, und das ist für niemanden produktiv. –

+0

'discards qualifiers' bedeutet, dass Sie etwas in der Funktion aufrufen, die kein 'const' enthält, aber wahrscheinlich sollte. Zeige uns mehr Code. –