[C++] Obiekt klasy 1 argumentem wirtualnej metody klasy 2

0

Mam w swoim programie 4 klasy: Element (abstrakcyjna), Liczba i Działanie (potomne) i osobna Stos. Program będzie wykonywał inne operacje na stosie w zależności od tego czy dostanie do przetworzenia obiekt Liczba, czy Działanie, dlatego stworzyłem funkcję wirtualną:

#include <iostream>

class Element
{
    protected:
        Element* next;

    public:
        Element() : next (0) {};
        Element(const Element & e);
        friend class Stos;
        virtual void przetwarzaj(Stos & s) = 0;

};

class Liczba : public Element
{
    private:
        double el;


    public:
        Liczba(double l);
        Liczba(double l, Element* e);
        const double pokaz_l() { return el; }
        virtual void przetwarzaj(Stos & s);
};

class Dzialanie : public Element
{
    private:
        char el;



    public:
        Dzialanie(char z);
        Dzialanie(char z, Element* e);
        const double pokaz_z() { return el; }
        virtual void przetwarzaj(Stos & s);

};


class Stos
{

    private:
        Element* top;
        int count;

    public:
        Stos() : top(0), count (0) {};
        ~Stos();
};

Dlaczego przy takim kodzie kompilator wyrzuca mi:
‘Stos’ has not been declared
(chodzi o pierwszą linię w której występuje wirtualna funkcja)

Wszystkie funkcje są zdefiniowane w odpowiednim pliku.

0

Deklaracja klasy stos powinna być PRZED pozostałymi, bo chcesz w nich używać stosu :P

0

Ale w stosie chcę używać Elementu, czyli Element musi być przed Stosem a Stos przed Elementem...? ;-P

0

Wystarczy deklaracja zapowiadająca przed. Np.:

class Element;

czy

class Stos;

Co wolisz pierwsze.

0

Deklaracja zapowiadająca ;)

class A;
class B
{
  A obiekt;
};
class A
{
  B obiekt;
};
<cpp>
</cpp>
0

I o to chodziło! Dzięki Wam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1