000
20.06.2004, 22:02 Uhr
~Pekingente
Gast
|
Für die Experten auf dieser Seite! Dies ist eine Aufgabe vom 2.Semester Programmieren C++
Fehlermeldung: error C2259: "Objekt2D" : Instanz von abstrakter Klasse kann aufgrund nachfolgender Elemente nicht erstellt werden:
Ich habe keine Ahnung wo der Fehler liegt und verliere so langsam den Überblick. Das man von einer abstrakten Klasse keine Instanzen erstellen, kann ist mir klar. Ich habe auch aller rein virtuellen Methoden in den abgeleiteten Klassen, wieder redefiniert.
Kann leider nicht den kompletten Code hochladen, da er zu lang ist.
C++: |
#ifndef _VERERBUNG_h_ #define _VERERBUNG_h_
const int anzahl_elemente = 20;
template<class T> class Container { public: Container(void); Container(const Container & x); ~Container(void); int begin(void); int end(void); int max_size(void); int size(void); bool isEmpty(void); bool isFull(void); void dumpForward(void); void dumpBackward(void); protected:
typedef T * ptr_t; struct Element { ptr_t value; Element * next; Element * previous; };
///Attribute int count; Element * first; Element * last; }; template<class T> class Sequence : public Container<T> { public: Sequence(void); Sequence(const Sequence & x); ~Sequence(void); int insert(int p,T & t); int insert(int p, T & t, int n); int erase(int p); int erase(int p1, int p2); void clear(void); };
template<class T> class List : public Sequence<T> { public: List(void); List(const List & x); ~List(void);
T front(void); T back(void); T & frontRef(void); T & backRef(void); void pushFront(T & t); T popFront(void); void pushBack(T & t); T popBack(void); void remove(T & t); void sort(void); void reverse(void); void unique(void);
T & at(int n); };
template<class T> class Deque : public Sequence <T> { public: Deque(void); Deque(const Deque & s); ~Deque(void);
T front(void); T back(void); T & frontRef(void); T & backRef(void); void pushFront(T & t); T popFront(void); void pushBack(T & t); T popBack(void); T & at(int n); };
#endif /*_VERERBUNG_h_*/
|
C++: |
#ifndef _OBJEKT2D_h_ #define _OBJEKT2D_h_
#include "punkt_2d.h"
const double PI = 3.1415926536;
class Objekt2D { public: Objekt2D(void); Objekt2D(int ,int); virtual ~Objekt2D(void); ///<Virtuell
virtual void verschiebe(const Punkt2D newRefPunkt); ///<Virtuell virtual void print(void) const = 0; ///<rein Virtuell virtual float flaeche(void) const = 0; ///<rein Virtuell virtual Objekt2D & spiegeln_anX(void) = 0; ///<rein Virtuell virtual Objekt2D & spiegeln_anY(void) = 0; ///<rein Virtuell virtual double distanz_ursprung(void);
protected: Punkt2D referenz_punkt; };
class Kreis : public Objekt2D { public: Kreis(void); Kreis(int, int, int); ~Kreis(void);
//virtual void verschiebe(const Punkt2D newRefPunkt);///<Redefinition virtual void print(void) const; ///<Redefinition virtual float flaeche(void) const; ///<Redefinition virtual Objekt2D & spiegeln_anX(void); ///<Redefinition virtual Objekt2D & spiegeln_anY(void); ///<Redefinition
void set_radius(int); int get_radius(void);
private: int radius; };
class Rechteck: public Objekt2D { public: Rechteck(void); Rechteck(int, int, int, int); ~Rechteck(void);
//virtual void verschiebe(const Punkt2D newRefPunkt); virtual void print(void) const; virtual float flaeche(void) const;
virtual Objekt2D & spiegeln_anX(void); ///<Redefinition virtual Objekt2D & spiegeln_anY(void); ///<Redefinition void set_breite(int); int get_breite(void); void set_hoehe(int); int get_hoehe(void);
private: int breite; int hoehe; };
class Dreieck: public Objekt2D { public: Dreieck(void); Dreieck(int,int,int,int,int,int); ~Dreieck(void); //void verschiebe(const Punkt2D newRefPunkt); virtual void print(void) const; virtual float flaeche(void) const; virtual Objekt2D & spiegeln_anX(void); virtual Objekt2D & spiegeln_anY(void); private: Punkt2D a,b,c; }; #endif /*_OBJEKT2D_h_*/
|
C++: |
#ifndef _PUNKT2D_h_ #define _PUNKT2D_h_
class Punkt2D { public: ///<Konstuktoren & Destruktoren Punkt2D(); ///<Standardkonstruktor Punkt2D(int x, int y); ///<Konstruktor mit Argumenten Punkt2D(const Punkt2D & punkt); ///<Kopierkonstruktor ~Punkt2D(); ///<Destruktor ///<Operatoren überladen ///const Punkt2D & operator= (const Punkt2D & punkt); Punkt2D& operator=(const Punkt2D &punkt);
///<Methoden int getX() const; int getY() const; void setX(int x); void setY(int y); double distanz_ursprung () const; double distanz(const Punkt2D & punkt) const;
void print(void) const; private: int x_koordinate; int y_koordinate;
};
bool operator<=(const Punkt2D & p1, const Punkt2D & p2); bool operator<(const Punkt2D & p1, const Punkt2D & p2); bool operator>=(const Punkt2D & p1, const Punkt2D & p2); bool operator>(const Punkt2D & p1, const Punkt2D & p2);
#endif /*_PUNKT2D_h_*/
|
C++: |
int main (void) { List<Objekt2D> * test; test = new List<Objekt2D>; return 0; }
|
|