[Klassen] Zuweisungsproblem?
-
Hallo! Ich habe eine Klasse MathVector geschrieben, die einen mathematischen Vektor darstellt, also nicht das, was C++ unter einem Vektor versteht.
In einer weiteren Klasse namens Ball verwende ich mehrere Vektoren (einen für die Richtung, einen für die Position). Diese Klasse wird wiederum von einer weiteren Klasse namens BillardTable verwendet. Dort werden mehrere Zeiger auf Ball-Objekte in einem C++-Vektor gespeichert.Verwende ich die Klasse Ball alleine, so ergeben sich keine Probleme. Will ich allerdings der Klasse BillardTable einen Ball hinzufügen mittels der Funktion addBall(Ball* b), so hagelt es Fehler:
./table/libtable.a(ball.o)(.text+0x1e): In function
Ball::basicInit()': /usr/include/g++/bits/stl_algobase.h:278: undefined reference to
MathVector::MathVector[in-charge](unsigned)'
./table/libtable.a(ball.o)(.text+0x41): In functionBall::basicInit()': /usr/include/g++/bits/stl_vector.h:415: undefined reference to
MathVector::MathVector[in-charge](unsigned)'
./table/libtable.a(ball.o)(.text+0x7b): In functionBall::Ball[not-in-charge]()': /home/hackbert/projekte/KPool/kpool/table/ball.cpp:15: undefined reference to
MathVector::setCoordinate(unsigned, double)'
./table/libtable.a(ball.o)(.text+0x97): In functionBall::Ball[not-in-charge]()': /usr/include/g++/bits/stl_vector.h:266: undefined reference to
MathVector::setCoordinate(unsigned, double)'usw.
Angeblich gibt es in den STL-Dateien Fehler. Das kann ja nicht sein. Hier nochmal die Klasse Ball:
class Ball { public: Ball(); Ball(double x, double y); Ball(double x, double y, MathVector direction); Ball(MathVector pos, MathVector direction); ~Ball(); MathVector getPosition(); MathVector getDirection(); void setDirection(MathVector direction); void setPosition(MathVector p); void move(double length); void reverseVectorY(); void reverseVectorX(); void setType(unsigned int type); protected: void basicInit(); unsigned int iType; MathVector* ptPosition; MathVector* mvDirection; };
und die Klasse MathVector:
class MathVector { public: MathVector(); MathVector(unsigned int i); ~MathVector(); bool inRange(unsigned int i); bool equalsNumCoords(unsigned int i); void setCoordinate(unsigned int coord, double value); void reverseCoordinate(unsigned int coord); void addCoordinate(double value); double getCoordinate(unsigned int coord); unsigned int getnCoordinates(); double operator [] (unsigned int i); MathVector operator + (MathVector m); MathVector operator - (MathVector m); MathVector operator * (MathVector m); MathVector operator * (double d); MathVector operator / (MathVector m); MathVector operator / (double d); MathVector operator *= (MathVector m); MathVector operator *= (double d); MathVector operator /= (MathVector m); MathVector operator /= (double d); MathVector operator += (MathVector m); MathVector operator -= (MathVector m); MathVector operator = (MathVector m); protected: std::vector<double> dblCoordinates; };
-
Kann es vielleicht daran liegen, dass die Quellcodedateien in verschiedenen Unterordnern liegen? Eigentlich wird jeder Unterordner zu einer statischen Bibliothek gelinkt, deshalb sollte es keine Probleme damit geben...
-
Hab den Fehler gefunden. Der Linker ist irgendwie durcheinander geraten, weil die betreffenden Dateien in Unterverzeichnissen lagen.
@Mods: Dieser Beitrag kann gelöscht werden...