Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

enumy i klasy

Ostatnio zmodyfikowano 2011-01-29 18:14
Autor Wiadomość
dmx81
Temat założony przez niniejszego użytkownika
enumy i klasy
» 2011-01-29 17:16:55
C/C++
//plik1.h
class A
{
    //cos
    enum tryb { on, off };
};

//plik2.h
class B
{
    //cos
    classA::tryb e_tryb;
};

//plik3.h
class C
{
    vector < B *> wektor;
    classA::tryb wybor();
}

chcialbym umiescic w klasie B zmienna typu enum klasy A, a w klasie C moc za pomoca metody zwracac zmienna tegoz typu (typu tryb - enuma z klasy A), jak prawidlowo to zrobic? bo otrzymuje komunikat, ze tryb nie jest nazwa typu

myslalem ze moze trzeba umiescic obiekt A w obiekcie B (lub dziedziczyc po tym obiekcie) ale obiekt A zawiera wiele innych danych (dlatego A i B sa osobnymi klasami, jedynie chcialem wykorzystac ten enum...)

chociaz jak sie zastanowic, moze zrobic jakas klase zawierajaca ten enum, a po niej dziedziczyc beda A i B ( moze i C, zaraz do tego dojde)
P-27423
kamillo121
» 2011-01-29 17:19:50
C/C++
class B
{
    //cos
    classA::tryb e_tryb;
};

class C
{
    vector < B *> wektor;
    classA::tryb wybor();
}

zamień na

C/C++
class B
{
    //cos
    A::tryb e_tryb;
};

class C
{
    vector < B *> wektor;
    A::tryb wybor();
}

I w klasie A enum tryb daj jako pole publiczne.
P-27424
dmx81
Temat założony przez niniejszego użytkownika
» 2011-01-29 17:24:37
tak mam - moja wina, bo zle wpisalem w poscie, wkleje kawalek kodu ktory mam:
C/C++
class CMenu
{
public:
   
    enum tryb
    {
        ewyjscie, edodaj, eusun
    };
   
    CWskaznik * ptrCWskaznik;
    CMenu();
    CMenu( const char * name );
    virtual ~CMenu();
    std::vector < CItems *> vitems;
    std::string menuName;
    void add( CItems * obj );
    void remove( int a );
    void make_items( const char * name, CBox * obj );
    void make_items( const char * name );
    int display();
    CMenu::tryb display_answer(); //  TUTAJ DOBRZE??
    void wskaznik_plus();
    void wskaznik_minus();
    int wskaznik_get();
    void wskaznik_set( int );
    std::string znacznik;
   
protected:
private:
};

class CItems
{
public:
    CItems();
    CItems( const char * Name );
    CItems( const char * Name, CBox * ptr );
    virtual ~CItems();
    std::string name;
    CBox * ptrBox;
    CMenu::tryb etryb; // tu wskazuje blad - tryb nie jest nazwa typu
protected:
private:
};

i w tej drugiej klasie mam napisane, ze tryb nie jest nazwa typu

no i czy w pierwszej klasie dobrze robie tworzac enum z operatorem zasiegu?
P-27425
kamillo121
» 2011-01-29 17:29:31
Ja wklejam ten sam kod tylko z usuniętymi miejscami gdzie kod odnosi się do klas, których deklaracji nie posiadam i się kompiluje. Klasa CItems nie widzi deklaracji enum widocznie (jak masz to podzielone na nagłówki). Zrób lepiej enuma osobno i umieść go w miejscu ogólniodostępnym. Albo jak chcesz koniecznie z jakimś przedrostkiem to umieść w przestrzeni nazw enum.

A co do tego operatora zasięgu to niepotrzebnie go używasz w klasie gdzie masz zadeklarowane owe enum.
P-27426
jsc
» 2011-01-29 17:29:46
Takie rzeczy robi się typedefem:
prawdziwy_typ typedef alias_typu;
P-27427
kamillo121
» 2011-01-29 17:37:19

Takie rzeczy robi się typedefem:
prawdziwy_typ typedef alias_typu;
A co tutaj ma typedef do enum ?
P-27428
dmx81
Temat założony przez niniejszego użytkownika
» 2011-01-29 18:03:38
utworzylem osoby plik (*.h, cpp jest potrzeby?), dolaczam go do innych i uzywam tamtego enuma
C/C++
//enum.h
enum tryb
{
    wyjscie, dodaj
};

//cmenu.h
class CMenu
{
public:
   
    //...
    int wskaznik;
    vector < citems *> vitems;
    tryb display_answer();
};

//citems.h
class CItems
{
public:
    //
    tryb etryb;
};

items sa wyswietlane przez menu::display(), w tej metodzie poruszam wskaznikiem, jesli wskaze na jakis item, zostanie zwrocony jego tryb (display() zwraca tryb)

czy tak jest poprawnie?


tzn dzialac dziala, ale nie zawsze jak dziala, to znaczy ze poprawnie(chcialbym sie trzymac OOP .
P-27430
kamillo121
» 2011-01-29 18:07:33
Jak działa i uważasz, że w wygodniejszy sposób się tego nie da zrobić to jest poprawnie.
P-27431
« 1 » 2
  Strona 1 z 2 Następna strona