Ожидаемая ошибка типа при попытке создать метод класса с параметром другого класса после импорта заголовочных файлов - PullRequest
0 голосов
/ 02 мая 2019

Итак, в основном я создаю 2 класса: Пациент и Доктор

, и я хочу создать метод экземпляра с именем requestMedicationForPatient, который принимает экземпляр пациента в качестве параметра.Поэтому я сделал что-то вроде

-(void)requestMedicationForPatient: (Patient*) patient;

в файле Doctor.h.а также я уже импортировал файл Patient.h в файлы Doctor.h и Doctor.m.Почему это не работает?

Patient.h:

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

NS_ASSUME_NONNULL_BEGIN

@interface Patient : NSObject
@property NSString* name;
@property NSInteger age;
@property (nonatomic) BOOL hasValidHealthCard;

- (instancetype)initWithName:(NSString*) name andAge: (int) age;
@end

NS_ASSUME_NONNULL_END

Patient.m:

#import "Patient.h"
#import "Doctor.h"

@implementation Patient

- (instancetype)initWithName:(NSString*) name andAge: (int) age
{
    self = [super init];
    if (self) {
        _age = age;
        _name = name;
    }
    return self;
}

@end

Doctor.h:

#import <Foundation/Foundation.h>
#import "Patient.h"
NS_ASSUME_NONNULL_BEGIN

@interface Doctor : NSObject
@property (nonatomic)NSString* name;
@property (nonatomic)NSString* specialization;
@property (nonatomic)NSMutableSet* patients;
- (instancetype)initWithName: (NSString*) name andSpecialization:         (NSString*) specialization;
-(void)requestMedicationForPatient: (Patient*) patient;
@end

NS_ASSUME_NONNULL_END

Doctor.m:

#import "Doctor.h"
#import "Patient.h"
@implementation Doctor

- (instancetype)initWithName: (NSString*) name andSpecialization: (NSString*) specialization
{
    self = [super init];
    if (self) {
        _name = name;
        _specialization = specialization;
    }
    return self;
}



@end

Я должен быть в состоянии создать этот метод с параметром типа Patient, верно?Но там написано, что ожидается тип.

1 Ответ

0 голосов
/ 02 мая 2019

Вы импортируете Patient.h в Doctor.h и импортируете Doctor.h в Patient.h.Всегда избегайте такого кругового импорта.Также избегайте ненужного импорта файла заголовка в другой файл заголовка.

Ничто в Patient.h не ссылается на что-либо из Doctor.h, поэтому вам не следует импортировать Doctor.h в ваш файл Patient.h.

Вам также следует удалить импорт Patient.h из Doctor.h.Чтобы сделать компилятор счастливым, вы можете предоставить прямую ссылку на Patient, используя @class Patient;.

Ваш обновленный Doctor.h должен быть:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@class Patient;

@interface Doctor : NSObject

@property (nonatomic) NSString* name;
@property (nonatomic) NSString* specialization;
@property (nonatomic) NSMutableSet* patients;

- (instancetype)initWithName:(NSString *)name andSpecialization:(NSString*)specialization;
- (void)requestMedicationForPatient:(Patient *)patient;

@end

NS_ASSUME_NONNULL_END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...