2013-08-01 7 views
0

Voici mon code. Il est très simple, mais je ne comprends pas l'erreurErreur lors de la compilation du code objectif-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); 
} 

Voici les erreurs que j'ai obtenu:

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

C'est presque le même code que dans votre question précédente http://stackoverflow.com/questions/17996426/any-mistakes-using-property-and-synthesize. Pourquoi acceptez-vous la réponse si cela ne fonctionne pas pour vous? - Et peut-être devriez-vous encore mentionner que vous utilisez ** GNUstep **. –

+0

Oui, c'est le même code mais j'ai résolu le problème précédent en fait j'ai plus cette erreur. Maintenant, le problème est différent. – Mazzy

+1

Il ne s'agit pas de GNUstep. J'utilise clang avec GNUstep et je peux compiler votre code très bien. –

Répondre

-1

vous devez ajouter les propriétés de l'interface.

cette

@interface Car { 
    @protected 
     NSString *brand; 
     int year; 
} 


@property(nonatomic,retain) NSString *brand; 
@property int year; 

@end 

au lieu de cette

@interface Car: NSObject 

@property(nonatomic,retain) NSString *brand; 
@property int year; 

@end //Car Interface 

devrait fonctionner - mais je n'ai pas essayé.

+0

Apprenez d'abord la différence entre les ivars et les propriétés. – Kreiri

+0

Ouais maintenant ça marche ... mais la raison n'est pas encore claire. Je vais aller étudier – Mazzy

1

Cela fonctionne correctement lorsqu'il est copié et collé dans un nouveau projet d'outil de ligne de commande basé sur XCode Cocoa. La seule différence est que j'ajouté votre code dans la @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; 
} 

La réponse par R. vous indique @ Martin ci-dessus utilisent GNUStep au lieu de XCode, donc vous pouvez souhaitez ajouter cette balise, ou demander des conseils spécifiquement sur les forums GNUStep ou salles de conversation.

+0

Selon ce que vous dites, la programmation en XCode est totalement différente de la programmation en GNUstep, donc c'est vraiment la raison – Mazzy

+1

@Mazzy - Vous parlez du @autoreleasepool? C'est juste une fonctionnalité automatisée de gestion de la mémoire d'Objective-C (dans la mesure où mes connaissances limitées s'étendent) - mais oui, XCode est son propre IDE à coup sûr. –

+1

Il ne s'agit pas de GNUstep, mais du compilateur. GCC est le problème, ou peut-être une version trop ancienne de clang. N'utilisez pas GCC avec Objective-C. Si vous connaissez un nouveau venu, dites-leur qu'ils devraient (doivent) utiliser clang, pas gcc. Désinstallez GCC si cela ne blesse personne. –

0
#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); 
    } 
Questions connexes