#objective-c
#objective-c
Вопрос:
У меня есть класс с именем MyClass, который содержит 3 NSInteger, и я не могу выполнить подобный метод:
- (myClass)getClass {
myClass *class1;
return class1
}
это выдает мне ошибку
РЕДАКТИРОВАТЬ: ошибка находится в .h
- (myClass *)getClass; Error: expected ')' before 'myClass'
Комментарии:
1. @Inerdia вероятно, «Тип интерфейса ‘MyClass’ не может быть возвращен по значению».
2. Нет, «ожидается ‘)’ перед MyClass»
3. Большое вам спасибо, я бил себя по голове с той же ошибкой! 🙂
Ответ №1:
Я полагаю, вы хотите вернуть экземпляр myClass
. Вы можете сделать это следующим образом:
- (myClass *)getClass {
myClass *class1 = [[[myClass alloc] init] autorelease];
return class1;
}
Если вместо этого вы хотите вернуть сам класс:
- (Class)getClass {
return myClass;
}
Вы можете изменить значение -
на a
, если хотите, чтобы это был метод класса, а не метод экземпляра. Ваш вопрос был не совсем ясен.
В Objective-C вы никогда не сможете вернуть объект по значению, поскольку размер объекта в Objective-C неизвестен во время компиляции. Если вам не нравятся звездочки везде, вы можете сделать typedef myClass* myClassRef
и вернуть a myClassRef
вместо этого.
Комментарии:
1. Спасибо, но ошибка в . его нет в .m. У меня также были ошибки в .m, но я написал ваш первый код и исправил их.
Ответ №2:
В Objective-C каждый тип класса является ссылочным типом. Итак, возвращаемый тип должен быть myClass*
. Когда у нас есть указатель, подобный —
int *ptr = new int; // The type of ptr is int* but not int. Same is the case for
// class types too.
Комментарии:
1. Да, я должен написать — , но я собираюсь попробовать с *
2. @user1019831 — хм.. вы изменили вопрос.
3. Это C , а не Objective-C.
4. @WTP — я почти уверен, что эта строка также компилируется на Objective-C. Пожалуйста, проверьте это. Хотя я могу ошибаться 🙂
5. @Mahesh это не так. Это происходит только в том случае, если вы компилируете как C или Objective-C . В Objective-C вам нужно сделать
int *ptr = malloc(sizeof(int));
.
Ответ №3:
Завершив ответ Махеша, вам нужно сделать:
- (myClass*) getClass {
myClass *class1;
return class1;
}
или, если метод статический, вам нужно сделать:
(myClass*) getClass {
myClass *class1;
return class1;
}