2010-12-20 15 views
1

Objective Cの中の単純な人クラスは、私は、私が前に6つのエラー、 期待指定-修飾子リストを取得し、単純なPersonクラスを作った「 - 」トークンは、私はObjective Cのを学ぶために始めている

だけであれば不思議誰かが、私が間違ってやっている私には

感謝メソッドの宣言は、ブレースを閉じる外となります

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


@interface Person:NSObject 
{ 
    NSString *firstName; 
    NSString *lastName; 


    -(void) setFName:(NSString *) theFirstName; 
    -(void) setLName:(NSString *) theLastName; 
    -(void) printName; 
} 
@end 

@implementation Person 
{ 

    -(void) setFName:(NSString *) theFirstName 
    { 
     firstName = [[NSString alloc]initWithString: theFirstName]; 
    } 

    -(void) setLName:(NSString *) theLastName 
    { 
     lastName = [[NSString alloc]initWithString: theLastName]; 
    } 

    -(void) printName 
    { 
     NSLog(@"The person's full name is",firstName,lastName); 
    } 

} 

@end 


int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

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

    [person setFName:@"Amir"]; 
    [person setLName:@"Karimian"]; 
    [person printName]; 

    [person release]; 
    [pool drain]; 
    return 0; 
} 
+1

'firstName'と' lastNameのを宣言していないため、何らかの理由'' @ property'を使って? –

+0

また、イニシャライザで姓名を設定することもできます。 – Abizern

+0

そして、あなたはiPhoneに言及しているので、メモリ管理コードはありません。自動リリースされていないため、自動解放プールはPersonクラスに影響しません。今すぐメモリ管理について考えてみると、後で問題が発生します。 – Abizern

答えて

4

を説明することができます。

@interface Person:NSObject 
{ 
    NSString *firstName; 
    NSString *lastName; 
} 

-(void) setFName:(NSString *) theFirstName; 
-(void) setLName:(NSString *) theLastName; 
-(NSString *) firstName; 
-(NSString *) lastName; 
-(void) printName; 

@end 

実装ではブレースは不要です。

@implementation Person 
// { is not required 
-(void) setFName:(NSString *) theFirstName { 
    // code 
} 

-(void) setLName:(NSString *) theLastName { 

} 

// in this way 

// } is not required 
@end 

少なくとも2つの論理エラーがあります。 In printName

NSLog(@"The person's full name is %@ %@",firstName,lastName); 

フォーマット文字列が間違っていました。

そしてメイン

[person setLName:@"Karimian"]; 

にあなたはユーザー "SER" を持っている代わりの "設定"。

+0

こんにちは、返信ありがとう、すべてのエラーは今行っていますが、私はまだ私の人のフルネームを取得していないプログラムを実行すると何らかの理由はありますか? – amir

+1

おそらくこのタイプのためです[人serLName:@ "Karimian"]; ' – Abizern

+0

あなたは入力ミスを修正しましたか?何を手に入れていますか? – taskinoor

5

それとももっと簡単:

@interface Person : NSObject 

@property (nonatomic, copy) NSString * firstName; 
@property (nonatomic, copy) NSString * lastName; 

- (NSString *) fullName; 

@end 

@implementation Person 
@synthesize firstName, lastName; 

- (NSString *) fullName { 
    return [NSString stringWithFormat:@"%@ %@", [self firstName], [self lastName]]; 
} 

- (void) dealloc { 
    [self setFirstName:nil]; 
    [self setLastName:nil]; 
    [super dealloc]; 
} 

@end 
0

また、離れてtaskinoorの答えから、それが実現するとよいでしょう - あなたのクラスで(空)deallocメソッド:あなたが望んでいた場合、その

-(void)dealloc { 
    [firstName release]; //since they have been alloced. 
    [lastName release]; 
    [super dealloc]; 
} 

注意をDave DeLongのようなプロパティを使用するには、@property(assign),@property(copy)または@property(retain)を選択し、NSStringをリリースするかどうかを管理することに注意する必要があります。ヘッダファイルで

1

:実装で

@interface Person:NSObject 
    { 
     NSString *firstName; 
     NSString *lastName; 
    } 


    @property(retain, nonatomic) NSString * firstName; 
    @property(retain, nonatomic) NSString * lastName; 

    -(void) setFName:(NSString *) theFirstName; 
    -(void) setLName:(NSString *) theLastName; 
    -(void) printName; 

    @end 

は、あなたのgetterメソッドとsetterアクセサ メソッドを作成する@synthesizeを使用します。

@implementation Person 

/* Create the getter and setter properties 
    which are also called accessor methods 
*/ 
@synthesize firstName = _firstName; 
@synthesize lastName = _lastName; 

//The other methods 
-(void) setFName:(NSString *) theFirstName{ 
} 
-(void) setLName:(NSString *) theLastName{ 
} 
-(void) printName{ 
} 

@end 
関連する問題