Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Container-Templates-Listen-Stack

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.06.2004, 07:26 Uhr
Tommix



'Morgen,

Zitat:

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


Du kannst von einer Klasse mit rein virtuellen Methoden keine Instanz erstellen, sondern nur von abgeleiteten Klassen Dreieck, Rechteck usw. Das ist ja gerade der Sinn rein virtueller Methoden.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: