dmx81 Temat założony przez niniejszego użytkownika |
enumy i klasy » 2011-01-29 17:16:55 class A { enum tryb { on, off }; };
class B { classA::tryb e_tryb; };
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) |
|
kamillo121 |
» 2011-01-29 17:19:50 class B { classA::tryb e_tryb; };
class C { vector < B *> wektor; classA::tryb wybor(); }
zamień na class B { A::tryb e_tryb; };
class C { vector < B *> wektor; A::tryb wybor(); }
I w klasie A enum tryb daj jako pole publiczne. |
|
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: 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(); 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; 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? |
|
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. |
|
jsc |
» 2011-01-29 17:29:46 Takie rzeczy robi się typedefem: prawdziwy_typ typedef alias_typu; |
|
kamillo121 |
» 2011-01-29 17:37:19 Takie rzeczy robi się typedefem: prawdziwy_typ typedef alias_typu;
|
A co tutaj ma typedef do enum ? |
|
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 enum tryb { wyjscie, dodaj };
class CMenu { public: int wskaznik; vector < citems *> vitems; tryb display_answer(); };
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 . |
|
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. |
|
« 1 » 2 |