2012-04-26 26 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 2012-04-26 21:44:13

回答

54

你的方法似乎是自由浮動的內main.m。實例方法需要放置在類的實現部分中。 (在@implementation@end之間)。

我的猜測是您應該將該代碼移入BNRItem.m。

+0

謝謝。我已將描述方法移至BNRItem.m,但現在有一組不同的問題。已經粘貼在上面的BNRItem.m中。 – pdenlinger 2012-04-26 21:46:53

+0

@pdenlinger:錯誤是因爲你在'serialNumber'後面加了分號而不是冒號。 – Chuck 2012-04-26 22:03:17

+0

@Chuck你的意思是分號而不是逗號,對吧?雖然這裏遲到了...... – jrturton 2012-04-26 22:07:43

1

如果你在Header或.m文件的第一個開始處有類似char的字樣,那麼它也可能是這個錯誤適用的。

^// 
// EMServices.m 
// MyController 
// 
// Created by EMart on 09.01.14. 
// Copyright (c) 2014 EMart. All rights reserved. 
//