0

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;

次に、次のように定義された2つのメソッドがあります。

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()内部のidの値を取得したいと思いますgroup1helloキャストインメソッドを実行する必要がありますか?または、の内部で、渡す前にmethod1キャストする必要がありますか?(group*)hello()

4

3 に答える 3

3

キャストは必要ありませんunion。:の正しいフィールドにアクセスするだけです。

void method1(ServiceData * data) {
    //inside the method call method hello
    hello(&data->group1);
};
于 2012-08-23T08:35:46.097 に答える
1

それ以外の

method1((ServiceData *)group1);

次のようなことをする必要があります。

ServiceData data;
data.group1.id = 10;
data.group1.age = 20;
method1(data);

そして、の実装は次のmethod1ようになります

void method1(ServiceData * data) {
    hello(&data->group1);
};
于 2012-08-23T08:38:21.143 に答える
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));
 }
于 2012-08-23T08:36:06.327 に答える