1

いくつかのスレッドを検索しましたが、答えが見つかりません。

私はObjective-Cを初めて使用し、アップル開発でブリーフィングを行って実験しましたが、エラーが発生し続けます: No visible @interface for 'XYZPerson' はセレクター '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

main() のコードは次のとおりです。

#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!

main() で [aPerson sayHello] と [aPerson sayBooBoo] を呼び出すことができる理由がわかりませんが、[aPerson saySomething:@"Something."] は問題を引き起こします。

4

1 に答える 1