Ошибка компиляции кода target-c
Вот это мой код. Это очень просто, но я не понимаю ошибку
#import <Foundation/Foundation.h>
@interface Car: NSObject
@property(nonatomic,retain) NSString *brand;
@property int year;
@end //Car Interface
#import "Car.h"
@implementation Car
@synthesize brand, year;
@end //Car Implementation
#import "Car.h"
int main (int argc, const char * argv[])
{
int y;
//Creo un nuovo oggetto
Car *myCar = [[Car alloc] init];
//Setto i parametri
[myCar setBrand: @"BMW Z4"];
NSLog (@"Inserisci data modello: ");
scanf (" %i", &y); //E' buona norma lasciare uno spazio
[myCar setYear: y];
//Stampo a video i dati
NSLog(@"Marca: %@ Anno: %i", [myCar brand], [myCar year]);
return (0);
}
Вот ошибки, которые я получил:
car.m:5:1: error: ivar 'brand' used by '@synthesize' declaration must be an existing iva
car.m:5:1: error: ivar 'year' used by '@synthesize' declaration must be an existing ivar
car.m:7:1: warning: incomplete implementation of class 'Car' [enabled by default]
car.m:7:1: warning: method definition for '-setBrand:' not found [enabled by default]
car.m:7:1: warning: method definition for '-brand' not found [enabled by default]
car.m:7:1: warning: method definition for '-setYear:' not found [enabled by default]
car.m:7:1: warning: method definition for '-year' not found [enabled by default]
3 ответа
Решение
Вам нужно добавить свойства в интерфейсе.
этот
@interface Car {
@protected
NSString *brand;
int year;
}
@property(nonatomic,retain) NSString *brand;
@property int year;
@end
вместо этого
@interface Car: NSObject
@property(nonatomic,retain) NSString *brand;
@property int year;
@end //Car Interface
должен работать - но я не пробовал.
Это прекрасно работает, когда копируется и вставляется в новый проект инструмента командной строки на основе какао XCode. Разница лишь в том, что я добавил ваш код в @autoreleasepool
:
main.m
#import <Foundation/Foundation.h>
#import "Car.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
int y;
//Creo un nuovo oggetto
Car *myCar = [[Car alloc] init];
//Setto i parametri
[myCar setBrand: @"BMW Z4"];
NSLog (@"Inserisci data modello: ");
scanf (" %i", &y); //E' buona norma lasciare uno spazio
[myCar setYear: y];
//Stampo a video i dati
NSLog(@"Marca: %@ Anno: %i", [myCar brand], [myCar year]);
}
return 0;
}
Ответ @Martin R. выше указывает на то, что вы используете GNUStep вместо XCode, поэтому вы можете добавить этот тег или обратиться за советом к конкретным участникам форумов или чатов GNUStep.
#import <Foundation/Foundation.h>
@interface Car: NSObject
{
@protected
NSString *brand;
int year;
}
@property(nonatomic,retain) NSString *brand;
@property int year;
@end //Car Interface
#import "Car.h";
@implementation Car
@synthesize brand, year;
@end //Car Implementation
int main (int argc, const char * argv[])
{
int y;
//Creo un nuovo oggetto
Car *myCar = [[Car alloc] init];
//Setto i parametri
[myCar setBrand: @"BMW Z4"];
NSLog (@"Inserisci data modello: ");
scanf (" %i", &y); //E' buona norma lasciare uno spazio
[myCar setYear: y];
//Stampo a video i dati
NSLog(@"Marca: %@ Anno: %i", [myCar brand], [myCar year]);
return (0);
}