Прежде всего, я новичок в объективе-C. На данный момент я пытаюсь решить следующую задачу:Наследование Objective-C, распространение строк на суперкласс
@interface Animal : NSObject {
@private
NSString* m_name;
}
-(Animal*) initName:(NSString*)name;
-(void) printName;
@implementation Animal
-(Animal*) initName:(NSString*)name {
self = [super init];
m_name = name;
return self;
}
-(void) printName {
NSLog(@"%s", m_name);
}
@end
@interface Bird : Animal {
}
-(Bird*) initName:(NSString*)name;
@implementation Bird
-(Bird*) initName:(NSString*)name {
self = [super initName:name];
return self;
}
@end
int main() {
Animal* bird = [[Bird alloc] initName:@"abird"]; // warning: assignment from distinct Objective-C type
[bird printName]; // prints invalid letters
[bird release];
}
Я хочу распространять аргумент конструктора name
в суперкласс, но он не работает. Я также попытался напечатать имя внутри конструктора без каких-либо успехов.
Включены все необходимые заголовки. Предупреждение warning: assignment from distinct Objective-C type [enabled by default]
при создании объекта дочернего класса является единственным предупреждением, которое я получаю.
Есть ли у кого-нибудь идеи, как я мог бы решить эту проблему?
Привет Dan
Какой компилятор вы используете? Единственное предупреждение, которое я получаю (используя Xcode 4.6.3), - это формат *, который задает тип «char *», но аргумент имеет тип «NSString *» в строке «NSLog (@«% s », m_name);». .. –
@MartinR Да, это странно. Присвоение выражения типа «указатель-подкласс» переменной типа «указатель-суперкласс» должно быть ОК. –