我对C ++中的以下代码有疑问:
typedef struct {
int id;
int age;
} Group1;
typedef struct {
int id;
char name;
float time;
} Group2;
typedef union {
Group1 group1;
Group2 group2;
} ServiceData;
typedef struct {
ServiceData data;
} Time;
然后我有一个变量:
Group1 * group1;
group1 = new Group1;
group1->id = 10;
group1->age = 20;
然后有两种方法定义如下:
void method1(ServiceData * data) {
//inside the method call method hello
hello(data);
};
void hello(Group1 *group1) {
printf("%d",group1->id);
}
我这样打电话给method1
:
method1((ServiceData *)group1);
但在method1
内,当参数group1
传递给方法hello()
时,我希望在group1
内获取id的值。我是否需要使用hello
方法进行任何演员表?或者在method1
内,在将其传递给(group*)
之前,是否需要将其投放到hello()
?
答案 0 :(得分:3)
您不需要演员,只需访问union
中的正确字段:
void method1(ServiceData * data) {
//inside the method call method hello
hello(&data->group1);
};
答案 1 :(得分:1)
而不是
method1((ServiceData *)group1);
你应该这样做:
ServiceData data;
data.group1.id = 10;
data.group1.age = 20;
method1(data);
method1
的实现应该是
void method1(ServiceData * data) {
hello(&data->group1);
};
答案 2 :(得分:0)
当然,你必须写
hello ( (Group1 * ) data);
(或写入数据 - > group1,其他答案)。
但是不要这样做,但是如果它是C ++那么使用继承:
struct GroupBase {
int id;
virtual ~GroupBase {
}
}
struct Group1 : public GroupBase {
int age;
virtual ~Group1 { }
}
struct Group2 : public GroupBase {
char name;
float time;
virtual ~Group2 { }
}
void method1 (GroupBase* data) {
hello (std::dynamic_cast<Group1*> (data));
}