2013-05-14 135 views
-1

通過多個線程搜索但找不到答案。錯誤:'XYZPerson'沒有可見的@interface聲明選擇器'saySomething'

我是新來的Objective-C和蘋果的發展經過簡短準備和嘗試,並不斷收到錯誤:「XYZPerson」不可見@interface聲明選擇「saySomething」

控制檯程序有一個添加類叫做 XYZPerson。下面是h和.m文件:

這是XYZPerson.h文件:

#import <Foundation/Foundation.h> 

@interface XYZPerson : NSObject 

@property (readonly) NSString *firstName; 
@property (readonly) NSString *lastName; 
@property (readonly) NSDate *dateOfBirth; 

- (void)sayHello; 
- (void)sayBooBoo; 
- (void)saySomething; 

+ (id)person; 

@end 

這是XYZPerson.m文件:

#import "XYZPerson.h" 

@implementation XYZPerson 

- (void)sayHello 
{ 
    [self saySomething:@"Say Hello, World!"]; 
} 

- (void)sayBooBoo 
{ 
    [self saySomething:@"Say BooBoo, World!"]; 
} 


- (void)saySomething:(NSString *)greeting 
{ 
    NSLog(@"%@", greeting); 
} 
@end 

這裏是主代碼():

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

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

    @autoreleasepool { 

     // insert code here... 
     NSLog(@"Hello, World from Main!"); 

     XYZPerson *aPerson = [[XYZPerson alloc] init]; 

     [aPerson sayHello]; 
     [aPerson sayBooBoo]; 

     [aPerson saySomething:@"Something"]; 

    } 
    return 0; 
} 

這會導致構建失敗。如果我刪除main()中的行「[aPerson saySomething:@」Something「];」

程序將與下面的輸出運行:

013-05-14 15:38:04.102 XYZPerson[2303:303] Hello, World from Main! 

2013-05-14 15:38:04.105 XYZPerson[2303:303] Say Hello, World! 

2013-05-14 15:38:04.106 XYZPerson[2303:303] Say BooBoo, World! 

只是想不通,爲什麼我可以調用[aPerson的sayHello]和[aPerson sayBooBoo]在main(),但[aPerson saySomething:@ 「某事」。]導致問題。

回答

-1

正如在評論中指出的那樣,這個完全相同的問題已經得到解答,但爲了給你一個快速的回答,你的.h有方法- (void)saySomething;而你的.m請求輸入參數(NSString),所以你需要改變你的.h中的東西到這個:

- (void)saySomething:(NSString *)greeting 

這是你在.m中使用的完全相同的簽名。

因爲您在StackOverFlow上的活動有限,所以我只想推薦在發佈問題之前進行一些研究。我相信你做到了,但如果你在搜索過程中徹底搜索,然後在此發佈問題,那麼它肯定會讓所有人受益。

+0

啊geez!謝謝!我想我被拋棄了,因爲「sayHello」和「sayBooBoo」對「saySomething」的調用工作正常。不知道爲什麼。也許是因爲「saySomething」在實現本身中是完全定義的。也許是外部實體「main()」拋出錯誤的原因,因爲它「saySomething」在XPZPerson頭文件中沒有完全定義。 – mikehoover

相關問題