ОШИБКА: семантическая проблема: недопустимый тип аргумента 'NSString *' для унарного выражения - PullRequest
0 голосов
/ 09 января 2012

После устранения ошибки идентификатора, я думаю, я теперь сгенерировал следующие ошибки, но я не вижу, где я ошибся ...

С тем, что я узнал, это должно работать .... но вместо этого генерирует ошибки ... странная вещь, каждый пример, с которым я сталкиваюсь, отличается? Так есть ли правильный способ использовать функцию?

Найдено в следующем файле Student.h

Ошибка: семантическая проблема: недопустимый тип аргумента 'NSString *' для унарного выражения

Ошибка: синтаксический анализ: ожидаемое выражение

Я ОЧЕНЬ новичок в программировании, с ограниченным опытом, поэтому любые советы по решению этой проблемы были бы оценены ... и обучение ...

Спасибо

Student.h (выглядит так)

#import < Foundation/Foundation.h >

@interface Student : NSObject {
@private

NSString *name;
NSString *gender; 
NSString *getStudentCategory;
int age;
}
@property (nonatomic,retain) NSString *name;
@property (nonatomic,retain) NSString *gender;
@property (nonatomic) int age;

- (NSString *)getStudentCategory;

@end

Student.m (выглядит так)

#import < Foundation/Foundation.h >
#import "Student.h"

@implementation Student
@synthesize name,gender,age;

- (id)init
{
self = [super init];
if (self) { 

    - (NSString *)getStudentCategory  //*ERROR: Semantic Issue: Invalid argument type 'NSString *' to unary expression*
    {
        NSString *studentCategory;
    if (age <=12) 
        studentCategory = @"Primary School Student.";
    else if (age >=13 && age <=17)            //*Error: Parse Issue: Expected expression*
        studentCategory = @"Secondary School Student.";
    else if (age >=18)                       //*Error: Parse Issue: Expected expression*
        studentCategory = @"College Student.";
    }
return self;
}

@end   

main.m (выглядит так)

#import < Foundation/Foundation.h >
#import "Student.h"

int main (int argc, const char * argv[])
{
@autoreleasepool {

    Student *pupil =[[Student alloc] init];

        pupil.name = @"john";
        pupil.gender = @"male";
        pupil.age = 20; 

        NSLog([NSString stringWithFormat:@"Name: %@, Gender: %@, age %d",pupil.name,pupil.gender,pupil.age]); 

        NSLog([pupil getStudentCategory]);

    }
return 0;

}

Я удален из Student.m:

- (id)init
{
self = [super init];
if (self) 

а это сработало? Зачем? : - /

Есть идеи? : -)

Ответы [ 2 ]

1 голос
/ 09 января 2012

Ну, вот проблема:

- (id)init
{
self = [super init];
if (self) { 
    // WHAT IS THIS CHICANERY?!
    - (NSString *)getStudentCategory  //*ERROR: Semantic Issue: Invalid argument type 'NSString *' to unary expression*
    {
        NSString *studentCategory;
    if (age <=12) 
        studentCategory = @"Primary School Student.";
    else if (age >=13 && age <=17)            //*Error: Parse Issue: Expected expression*
        studentCategory = @"Secondary School Student.";
    else if (age >=18)                       //*Error: Parse Issue: Expected expression*
        studentCategory = @"College Student.";
    }
return self;
}

Я не знаю, что это за строка, начинающаяся с - (NSString *)getStudentCategory. Похоже, вы пытаетесь определить метод внутри другого метода, и вы не можете этого сделать.

0 голосов
/ 09 января 2012

Сообщение об ошибке от компилятора скажет вам, что такое необъявленный идентификатор.Это говорит вам, что "NSString" не объявлено?Если это так, убедитесь, что вы импортируете <Foundation/Foundation.h> или <Cocoa/Cocoa.h>, прежде чем использовать его.

...