2009-02-28 7 views
1

私は客観的なC初心者です。カテゴリに作成されたfuncを呼び出す警告が表示されるのはなぜですか?目的のカテゴリにfuncを追加する

#import <stdio.h> 
#import <objc/Object.h> 

@interface MyObj: NSObject 
{ 
@public 
    int num; 
} 

-(void) print; 
@end 

@implementation MyObj; 
-(void) print 
{ 
    printf("%d\n", self->num); 
} 
@end 

@implementation MyObj(more) 
-(void) quack 
{ 
    printf("Quack\n"); 
} 
@end 


int main (int argc, char *argv[]) 
{ 
    MyObj *obj = [[MyObj alloc] init]; 
    obj->num = 9; 
    [obj print]; 
    [obj quack]; //warning my not respond to quack 
    [obj release]; 
} 

答えて

3

MyObjのインタフェースを宣言する必要があります(詳細)。

@interface MyObj(more) 
-(void)quack; 
@end 
1

あなたがObj-Cの初心者であることを述べたので、いくつか言及したいと思います。

法の内部では、あなたのprint方法ができるように、インスタンス変数で取得するためにself->を参照する必要はありません。

-(void) print 
{ 
    printf("%d\n", num); 
} 

はまた、あなたは通常、直接外部インスタンス変数にアクセスすることはありませんのでご注意(すなわち、あなたはobj->numを実行しません - 実際には、Obj-Cコードでは->演算子がよく見られません)。代わりに、プロパティのアクセサーを指定します(これはObjective-C 2.0と仮定します)。

// In the interface: 
@property (assign) int num; 

// In the implementation: 
@synthesize num; 

// In main: 
obj.num = 9; 
+0

私は2.0を使用しているようだ。ありがとう:)これははるかに良く見える –

関連する問題