2012-04-26 3 views
27

オーバーライドされた説明メソッドの "メソッド宣言のコンテキストが見つかりません"が表示されます。コードの何が間違っているのか分かりますか?オーバーライドされた説明メソッドの "メソッド宣言のコンテキストが見つかりません"

#import <Foundation/Foundation.h> 
#import "BNRItem.h" 

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

    @autoreleasepool { 

     // Create a mutable array object, store its address in items variable 
    NSMutableArray *items = [[NSMutableArray alloc]init]; 

    BNRItem *p = [[BNRItem alloc]init]; 
    NSLog(@"%@ %@ %@ %d", [p itemName], [p dateCreated], [p serialNumber], [p valueInDollars]); 

    // This creates a new NSString, "Red Sofa" and gives it to the BNRItem 
    [p setItemName:@"Red Sofa"]; 

    // This creates a new NSString, "A1B2C" and gives it to the BNRItem 
    [p setSerialNumber:@"A1B2C"]; 

    // We send the value 100 to be used as the valueInDollars of this BNRItem 
    [p setValueInDollars:100]; 

    // Destroy the array pointed to by items 
    items = nil; 

    } 
    return 0; 
} 

-(NSString *)description // Missing context for method declaration 
{ 
    NSString *descriptionString = 
    [[NSString alloc]initWithFormat:@"%@ (%@): Worth $%d, recorded on %@", 
    itemName; 
    serialNumber; 
    valueInDollars; 
    dateCreated]; 

return descriptionString; 

} 

BNRItem.m

#import "BNRItem.h" 

@implementation BNRItem 

-(void)setItemName:(NSString *)str { 
    itemName = str; 
} 

-(NSString *)itemName { 
    return itemName; 
} 

-(void)setSerialNumber:(NSString *)str { 
    serialNumber = str; 
} 

-(NSString *)serialNumber { 
    return serialNumber; 
} 

-(void)setValueInDollars:(int)i { 
    valueInDollars = i; 
} 

-(int)valueInDollars { 
    return valueInDollars; 
} 

-(NSDate *)dateCreated { 
    return dateCreated; 
} 

-(NSString *)description 
{ 
    NSString *descriptionString = 
    [[NSString alloc]initWithFormat:@"%@ (%@): Worth $%d, recorded on %@", 
    itemName, 
    serialNumber; // Expected "]" 
    valueInDollars, // Expression result unused 
    dateCreated]; //Extraneous "]" before ";" 

    return descriptionString; 
} 


@end 
+0

ありがとうございます。私は説明メソッドをBNRItem.mに移しましたが、今は別の問題があります。上記のBNRItem.mに貼り付けました。 – pdenlinger

答えて

54

あなたの方法は自由main.m内部で浮いているように見えます。インスタンスメソッドは、クラスの実装セクション内に配置する必要があります。 (@implementation@endの間)。

私の推測では、そのコードをBNRItem.mに移動する必要があります。

+0

ありがとうございます。私は説明メソッドをBNRItem.mに移しましたが、今は別の問題があります。上記のBNRItem.mに貼り付けました。 – pdenlinger

+0

@pdenlinger:エラーは、 'serialNumber'の後にコロンの代わりにセミコロンを入れたためです。 – Chuck

+0

@Chuckあなたはコンマの代わりにセミコロンを意味します、そうですか?それはここに遅れていますが... – jrturton

1

Header oder .mファイルの最初の部分にcharのようなものがある場合、このエラーが発生する可能性もあります。

^// 
// EMServices.m 
// MyController 
// 
// Created by EMart on 09.01.14. 
// Copyright (c) 2014 EMart. All rights reserved. 
// 
関連する問題