2010-04-21 2 views
2

Есть в любом случае, с помощью которого мы можем скопировать один перечисление на другой, например, для:Использование перечислений в C?

 enum Element4_Range{a4=1,b4,c4,d4}; 
    enum Element3_Range{a3=1,b3,c3}; 
    enum Element3_Range Myarr3[10]; 
    enum Element4_Range Myarr4[10]; 

    enum Element3_Range MyFunc(Element4_Range); 

    main() 
    { 
      MyFunc(Myarr4); 
    } 
    enum Element3_Range MyFunc(Element4_Range Target) 
    { 
      enum Element3_Range Source; 
      Source = Target;-----------Is this possible? 
     } 

Если не кто-нибудь, пожалуйста, покажите мне путь, чтобы скопировать значение перечисления от одного к другому?

я получаю сообщение об ошибке при выполнении этой как

  1. несовместимых типов в присвоении Element3_Range*' to Element3_Range [10]
  2. не может преобразовать Element4_Range' to Element3_Range 'в назначении

Спасибо и наилучшими пожеланиями
Maddy

ответ

2

Литье:

Source = (Element3_Range)Target; 
+0

@Jim --- Я пробовал, bnut то не работало out.The ошибка Jst вскочила, что 1) преобразование из 'перечислений Element4_Range * 'в' ENUM Element3_Range' – maddy

+4

@maddy: На основании этой ошибки, вам 'пытаюсь наложить указатель на перечисление на перечисление. Вы должны были вставить неправильный код в этот вопрос. Является ли Target указателем? Источник? Перечисление является интегральным значением, и вы должны иметь возможность его использовать. – tomlogic

+0

@maddy вы используете компилятор в режиме C++? например, ваш исходный файл заканчивается на .cpp (а не на .c), и вы используете gcc? Вы не должны видеть сообщение об ошибке, которое вы сообщаете при использовании предложенного литья в C. Кроме того, перечисление перечислений не рекомендуется - хотя, как вы увидите, это возможно. ;) –

1

Перечисление - это int с проверкой типа. Если вы не хотите проверять тип, используйте int.

0

Вы могли бы также рассмотреть возможность использования переключателя блока:

switch(Target) { 
case a4: 
    return a3; 
case b4: 
    return b3; 
case c4: 
    return c3; 
} 

Это не всегда может быть желательно использовать «фактическое значение» из перечисления, в отличии от его «логического значения». Конечно, это не быстро, но дело не в этом.

Смежные вопросы