当OC对象的成员变量是struct类型时,如果直接用c语言的方式直接赋值就会报错,如s->birthday={1990,12,11};就会抛出错误。有两种方法可以解决这个问题:
一、声明并初始化一个struct类型临时变量,再整个赋值给birthday成员。
二、对birthday成员内部的各个元素分开赋值。
#import <Foundation/Foundation.h>
//性别枚举
typedef enum{
SexMan,
SexWoman
} Sex;
//日期结构体
typedef struct {
int year;
int month;
int day;
} Date;
//学生类
@interface Student : NSObject
{
@public
Sex sex;//性别
Date birthday;//生日
double weight;//体重
char *name;//姓名
}
- (void)eat;
- (void)run;
-(void)printf;
@end
@implementation Student
- (void) eat
{
weight+=1;
NSLog(@"学生吃完这次后的体重是%f",weight);
}
- (void)run
{
weight -=1;
NSLog(@"学生跑完这次后的体重是%f",weight);
}
- (void)printf
{
NSLog(@"性别=%d,姓名=%s,生日=%d-%d-%d",sex,name,birthday.year,birthday.month,birthday.day);
}
@end
int main()
{
Student *s=[Student new];
s->name="jim";
s->sex=SexMan;
//这种方式是错误的
//s->birthday={1990,12,11};
//第一种赋值方式:声明并初始化一个Date结构类型的临时变量,再赋值给类的成员变量
//Date d={1990,12,11};
//s->birthday=d;
//第二种赋值方式:对成员变量中的各个元素分开进行赋值
s->birthday.year=1990;
s->birthday.month=12;
s->birthday.day=11;
s->weight=55;
[s run];
[s eat];
[s printf];
return 0;
}