2013-08-01 2 views
0

여기 내 코드입니다. 그것은 매우 간단하지만 오류를 내가 가진 여기objective-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

이것은 이전 질문과 거의 동일합니다. http://stackoverflow.com/questions/17996426/any-mistakes-using-property-and-synthesize. 그것이 당신을 위해 작동하지 않는 이유는 무엇입니까? - 아마 당신은 ** GNUstep **을 사용하고 있음을 다시 언급해야합니다. –

+0

네, 그 코드는 같지만 이전에 문제가 있었지만 그 오류는 더 이상 없습니다. 이제 문제는 다릅니다. – Mazzy

+1

이것은 GNUstep과 관련이 없습니다. 나는 GNUstep과 함께 clang을 사용하고 있으며 코드를 잘 컴파일 할 수있다. –

답변

-1

당신이 인터페이스 내에서 속성을 추가해야합니다.

대신

@interface Car: NSObject 

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

@end //Car Interface 

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


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

@end 

작동합니다 -하지만 난 시도하지 않았습니다.

+0

먼저 ivars와 속성의 차이점을 학습하십시오. – Kreiri

+0

그래, 이제는 효과가 있지만 ... 아직 명확하지 않은 이유가있다. – Mazzy

1

새 XCode 코코아 기반 명령 줄 도구 프로젝트에 복사하여 붙여 넣을 때 제대로 작동합니다. 당신은 할 수있다, 그래서 대신 엑스 코드의 그누 스텝을 사용하고 @Martin R.에 의한 대답은 위를 나타냅니다

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; 
} 

: 유일한 차이점은 내가 @autoreleasepool에 코드를 추가입니다 해당 태그를 추가하거나 GNUStep 포럼 또는 대화방에 대한 조언을 구하십시오.

+0

당신이 말하는 바에 따르면, XCode 프로그래밍은 GNUstep 프로그래밍과 완전히 다른 점입니다. 그래서 이것이 정말로 이유입니다. – Mazzy

+1

@Mazzy - @autoreleasepool을 언급하고 있습니까? 이것은 Objective-C의 자동화 된 메모리 관리 기능입니다 (제한적인 지식이 확장되는 한). 그렇지만 XCode는 자체 IDE입니다. –

+1

이것은 GNUstep에 관한 것이 아니라 컴파일러에 관한 것입니다. GCC가 문제이거나 너무 오래된 버전의 clang 일 수 있습니다. Objective-C와 함께 GCC를 사용하지 마십시오. 어떤 신참을 알고 있다면 gcc가 아니라 clang을 사용해야한다고 말해야합니다. GCC를 제거하면 다른 사람에게 해를 끼치 지 않습니다. –

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); 
    } 
관련 문제