2013-05-14 82 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

相关问题