2012-01-12 4 views
2

у меня есть это перечисление в классе ItemEnum другого класса в качестве параметра

enum EquipSlot 
{ 
RightHand, 
Head, 
... 
}; 

класс персонажа это объявление функции

void Character::UnequipSlot(Item::EquipSlot slot); 

класс деталь не в любом пространстве имен или часть другого класса.

Я использую Item: EquipSlot в реализации много без ошибок. он только дает ошибку компиляции во время объявления.

Каков правильный способ вызова перечисления другого класса?

(компилятор VC++ 9) ошибки: ошибка C2027: использование неопределенного типа 'Item' (класс элемента используется в других объявлениях)

спасибо.

+2

Я понятия не имею, что именно вы просите? Может показаться, что ошибка компилятора поможет. Таким образом, мы покажем, что именно вы сделали, чтобы получить эту ошибку и как вы использовали 'Item :: EquipSlot', не давая вам ошибку. В основном ваш вопрос требует дополнительной информации, чтобы быть ответственным – Grizzly

+0

добавлена ​​ошибка для публикации. – mikbal

+0

Вы можете попытаться убедить себя, что происходит, написав самую маленькую, полную программу, охватывающую вашу проблему, которая затем компилируется или не компилируется. Слишком много двусмысленности в отношении вашей среды здесь. –

ответ

3

Включить заголовок, который определяетItem.

Если Item является только декларировала, Item может использоваться в некоторых контекстах, но не тогда, когда размер или содержание Item требуется.

+0

Я использую предварительно скомпилированные заголовки. он использовал форвардное объявление класса предметов, но этого недостаточно (почему?). теперь я изменил порядок character.h и item.h. это сработало. он кажется, что декларация вперед не дает информации, достаточной для использования перечислений. – mikbal

+0

@mikbal: Это правильно. Прямое объявление только гарантирует компилятору, что класс существует. Вы увидите в других файлах «Элемент» в этом файле, что никакой другой информации о «Элементе» не требуется. –

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