Witam, mam taki oto początek kodu do Tictactoe:
enum pole{pusta,krzyzyk,kolko};
enum status{nierozpoczete,start,win,draw};
enum sign{krzyzyk,kolko};
Przy kompilacji wywala błędy:
.\Kółko.cpp(8) : error C2365: 'krzyzyk' : redefinition; previous definition was 'enumerator'
.\Kółko.cpp(6) : see declaration of 'krzyzyk'
.\Kółko.cpp(8) : error C2365: 'kolko' : redefinition; previous definition was 'enumerator'
.\Kółko.cpp(6) : see declaration of 'kolko'
Wychodzi na to że nie mogę zadeklarować 2x tej samej wartości, da się to rozwiązać?
_alex
([alex])
#2
A jak napiszesz:
int i=krzyzyk;
to jaką wartość oczekujesz w tej zmiennej “i” - 1 czy 0 ?
Właśnie dla tego nie ma takiej możliwości, możesz użyć np:
enum pole{p_pusta,p_krzyzyk,p_kolko};
enum status{t_nierozpoczete,t_start,t_win,t_draw};
enum sign{s_krzyzyk,s_kolko};
kubar3k
(Kubarek)
#3
To jest jedna z wad c++, w C# ten problem został rozwiązany w elegancki sposób:
enum pole{pusta,krzyzyk,kolko};
enum status{nierozpoczete,start,win,draw};
enum sign{krzyzyk,kolko};
Kod ten sam co w c++, ale użycie się zmienia:
pole typPola; sign znak;
typPola = pole.krzyzyk;
znak= sign.krzyzyk;
_alex
([alex])
#4
kubar3k , bo nie znasz C++ w którym jest podobne rozwiązanie i właśnie od niego pochodzi to rozwiązanie z C#.
namespace pole { enum pole{pusta,krzyzyk,kolko}; }
namespace status { enum status{nierozpoczete,start,win,draw}; }
namespace sign { sign{krzyzyk,kolko}; }
użycie:
x=pole::kolko;
y=sign::kolko;
kubar3k
(Kubarek)
#5
W każdym razie, w C# zrobione jest to lepiej. Kto to widział takie cyrki robić, żeby dla każdego enuma tworzyć przestrzenie nazw
_alex
([alex])
#6
Wg mnie cyrki są już przy wprowadzeniu dwóch stałych o takiej samej nazwie ale różnych wartościach:
krzyzyk ten z enum pole z wartością 1
krzyzyk ten z enum sign z wartością 0
oraz:
kolko ten z enum pole z wartością 2
kolko ten z enum sign z wartością 1
Aby rozwiązać takie cyrki to potrzebne jeszcze większe cyrki.