Использование перечислений и операторов switch в классе - PullRequest
2 голосов
/ 09 июня 2010

Как заставить работать следующий класс калькулятора?:

//Calculator.h

#import <Cocoa/Cocoa.h>

@interface Calculator : NSObject {
    float initialNumber, operandNumber;
    typedef enum{
    additionOperation,
    subtractionOperation,
    multiplicationOperation,
    divisionOperation
    }operationType;
}

@property(readwrite) float initialNumber, operandNumber;
@property(readwrite) enum operationType; //Line 16

- (float) doOperation;

@end

В XCode 3.1.3 я получаю сообщение "error: синтаксическая ошибка до 'typedef'" и предупреждение: объявление не объявляетчто-нибудь "в строке 16 Calculator.h

//Calculator.m

#import "Calculator.h"

@implementation Calculator
@synthesize initialNumber, operandNumber, operationType;

-(float) doOperation{
    switch (self.operationType){  //Line 9
        case 0:
            return self.initialNumber + self.operandNumber;
            break;
        case 1:
            return self.initialNumber - self.operandNumber;
            break;
        case 2:
            return self.initialNumber * self.operandNumber;
            break;
        case 3:
            return self.initialNumber / self.operandNumber;
            break;
        default:
            return 0;
            break;
    }
}

@end

В реализации XCode выдает мне" объявление свойства 'operationType' не найдено в интерфейсе ", а" запрос элемента 'operationType' неструктура или союз. "Я правильно объявляю свои перечисления?

Кроме того, могу ли я использовать в операторах switch «case добавлениеOperation» или «case 0»?

Ответы [ 2 ]

4 голосов
/ 09 июня 2010

Переместите объявление enum из объявления класса. Вы можете поместить это прямо выше. И вы можете переименовать typedef в «OperationType». Затем, где у вас есть объявление, объявите переменную этого типа: 'OperationType operationType;'

0 голосов
/ 03 августа 2012

Я получил несколько интересных ответов на аналогичный вопрос, который я задал здесь .Проверьте это, но суть заключается в том, что *

"typedefs, такие как NSViewWidthSizable, на самом деле являются битовыми масками, которые позволяют выполнять приятные операции ORing, которые вам так нравятся" *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...