Deklaracja takiej samej wartości w 2 enum'ach

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ć?

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};

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;

:slight_smile:

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;

W każdym razie, w C# zrobione jest to lepiej. Kto to widział takie cyrki robić, żeby dla każdego enuma tworzyć przestrzenie nazw :slight_smile:

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.