Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как в описание класса встроить enum???


Автор: AlexNor 5.9.2004, 16:09
Проблема вот в чём. Надо что бы в описании класса были enum. Что-то типа такого:
Код

class A
{
       A() {};
       ~A() {};
public:
       enum enum1 {a,b,c,d};
       enum enum2 {a,b,c,d};        
}

но, как сами понимаете - при компиляции выдаётся ошибка: "error C2365: 'a' : redefinition; previous definition was a 'enumerator'" ....... и т.д.

Namespace использовать внутри классов нельзя sad.gif
И что делать?

Автор: bel_nikita 5.9.2004, 16:41
AlexNor
enum - тоже что define. Поэтому и ругается.
Если сделать так:
Цитата
class A
{
  A() {};
  ~A() {};
public:
  enum enum1 {a,b,c,d};
  enum enum2 {e,f,g,h};   
}
то ругаться не будет smile.gif

Автор: srd 5.9.2004, 16:46
Код
class A
{
       A() {};
       ~A() {};
public:
       enum enum1 {a,b,c,d};
       enum enum2 {a,b,c,d};        
}

Загадочный код smile.gif Попробуй так:
Код

class A
{
       A() {};
       ~A() {};
public:
       struct A1 { enum enum1 {a,b,c,d}; };
       struct A2 { enum enum2 {a,b,c,d}; };
};

Тогда к элементам перечисления можно обращаться как A1::a, A2::a, A1::b, A2::b и т.д.

Автор: Darked 5.9.2004, 17:00
А почему бы не так???

class A
{
A() {};
~A() {};
public:
enum {a,b,c,d} enum1,enum2;

}

Автор: AlexNor 5.9.2004, 17:08
bel_nikita
не катит wink.gif

srd
спасибо.
ненаглядно немного получается что при описании параметра в функции f -нужно указывать не токо имя структуры но и имя перечисления...
Код

class A
{
public:
       A() {};
       ~A() {};
public:
 struct enum1 { enum enum_{a=1,b=2,c=3,d=4};};
 struct enum2 { enum enum_ {a,b,c,d};};
 
 void f(enum1::enum_ en) {std::cout<<en<<std::endl;};
};


int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.f(A::enum1::d); // или так a.f(A::enum1::enum_::d);    :)
        return 0;
}

Автор: srd 5.9.2004, 17:08
Darked
Я так понял, что требуется иметь константы с совпадающими именами, но принадлежащие разным перечислениям. Поэтому такой вариант проблему не решает. Он только определяет безымянное перечисление и две переменные с типом этого перечисления (кстати, зачем они нужны?)

Автор: AlexNor 5.9.2004, 17:09
Darked
имена могут быть и одинаковые - а вот значения разные...

Автор: Darked 5.9.2004, 22:14
Спасибо все за пояснения, я просто в задачу не врубился.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)