1

Objective-C를 처음 접하고 GNUstep 및 MinGW 환경에서 작업하고 있습니다. 이 코드를 컴파일하지만, 오류 데 :Objective-C on GNUstep AutoReleasePool 선언되지 않은 문제

#import "Foundation/Foundation.h" 

@interface C : NSObject 
{ 
    float f; 
} 

- (void) gamerHell: (NSString *) name : (NSString *) lastName ; 

@end 

@implementation C 

- (void) gamerHell: (NSString *) firstName : (NSString *) lastName { 

    NSLog(@"Welcome, %s %s",firstName,lastName); 
} 

@end 

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

    NSAutoReleasePool * pool = [[NSAutoReleasePool alloc] init]; 

    C *ob = [[C alloc] init]; 
    [ob gamerHell: @"SHAN" : @"UL HAQ"]; 

    [ob release]; 

    [pool drain]; 
    return 0; 
} 

그것은 다음과 같이 컴파일 타임 오류가 제공됩니다 :

'NSAutoReleasePool' is undeclared (first use in this function)

나는이 오류를 극복하기 위해 어떻게해야합니까?

답변

6

NSAutoReleasePool (소문자 : r) 대신 NSAutoreleasePool을 사용해보세요.

+2

또한 Foundation 헤더는 큰 따옴표가 아닌 꺾쇠 괄호로 로 가져와야합니다. –

6

Adam이 신고 한 문제를 해결 했으므로 클래스 이름에 오타가 있습니다. 그러나 몇 가지 다른 문제가 있습니다. 내가 알아 차리면 도움이 될 것입니다.

  • 익명 선택 조각 좋은 생각이 결코 :

    • 귀하의 방법은 코드를 적게 읽을 수 있도록하고, 즉, 당신을 도우려는 사람들을 혼란스럽게하는 몇 가지 목표 - C 규칙을 나누기. 항상 콜론 앞에 설명이 포함 된 이름을 사용하십시오.
    • 더 좋은 서명은 - (void) hellowWithFirstName:(NSString*)firstName lastName:(NSString*)lastName;
    • 입니다. 메소드 선언 및 정의에서 동일한 형식 매개 변수 이름을 사용하는 것이 좋습니다. (당신은 다른 사람의 "firstName"과 "firstName"을 사용합니다.) 이름을 다르게 지정하면 사람들이 코딩 할 공개 인터페이스이기 때문에 헤더 파일의 이름을 잘 생각하십시오.
  • "C"보다 나은 클래스 이름을 선택한 것으로 가정하고 데모 목적으로 자리 표시 자로 사용한 것입니다. Objective-C에는 "고유"클래스에 대한 패키지 또는 네임 스페이스가 없으므로 클래스 명명에 특히주의하십시오.

나는 Objective-C에 익숙하지 않은 것으로 알고 있습니다. 이것들은 모두 언어를 배우는 사람들에게 공통된 고민입니다. 따라서 이러한 점을 가혹한 비판이 아닌 친근한 조언으로 삼으십시오. * 표시 한 후 공간을 제거

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; 

NSAutoReleasePool * pool = [[NSAutoReleasePool alloc] init]; 

에서

+0

대단히 감사합니다. 퀸. 내 마음 속에 이런 것들을 지키고 따르도록하겠습니다. 다시 고마워요. –

0

스위치는 나를 위해 오류 메시지의 처리했다.

관련 문제