Objective C программа не компилируется - PullRequest
2 голосов
/ 21 июня 2011

В настоящее время я изучаю цель c на моем компьютере, и моя программа не будет компилироваться. Это ошибка, которую я получаю. "Interface.m: В функции '- [Персональная печать]': Interface.m: 17: 2: ошибка: не удается найти объявление между связями для NXConstantString '"

Я использую компилятор gcc.

Вот моя программа

 #import <Foundation/NSObject.h>
 #import <stdio.h>

@interface Person : NSObject {
    int age;
    int weight;
}

-(void) print;
-(void) setAge: (int) a;
-(void) setWeight: (int) w;

@end    

@implementation Person
-(void) print {
    printf(@"I am %i years old and I weigh about %i pounds",age,weight);
}
-(void) setAge: (int) a{
    age = a;
}
-(void) setWeight: (int) w{
    weight = w;
}
@end 

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

    Person *person;

    person = [Person alloc];    
    person = [person init];

    [person setAge: 16];
    [person setWeight: 120];
    [person print];
    [person release];

    return 0;

}

1 Ответ

3 голосов
/ 21 июня 2011

Литеральные строки, такие как @"I am %i years old and I weigh about %i pounds", (по умолчанию) имеют тип NSConstantString, но вы не импортируете файл заголовка, который объявляет этот класс.

Вы можете добавить:

#import <Foundation/NSString.h>

или просто импортируйте все заголовки в платформе Foundation:

#import <Foundation/Foundation.h>
<Ч />

Редактировать: Я только что заметил, что вы используете строку Objective-C в качестве аргумента для printf():

printf(@"I am %i years old and I weigh about %i pounds",age,weight);

Это не правильно; printf() ожидает строку C, например ::

printf("I am %i years old and I weigh about %i pounds",age,weight);

Вы также можете использовать NSLog(), который ожидает строку Objective-C:

NSLog(@"I am %i years old and I weigh about %i pounds",age,weight);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...