Вы не можете инициализировать членов-членов таким образом: вам потребуется иметь конструктор в detail
и вызывать его из ctor-initializer subid_u
.
union subid_u
{
inline subid_u(uint32_t gid, uint32_t sid) : detail(gid, sid) {}
struct detail_t
{
detail_t(uint32_t gid, uint32_t sid) : gid(gid), sid(sid) {}
uint32_t gid;
uint32_t sid;
};
detail_t detail;
uint64_t subscriptionID;
};
Итак, вы попробовали это и получили вторую ошибку. Да, сложный объект не имеет смысла в объединении.
Вместо инициализации используйте присвоение (и я бы никогда обычно не рекомендовал бы это!)
union subid_u
{
inline subid_u(uint32_t gid_, uint32_t sid_) {
detail.gid = gid_;
detail.sid = sid_;
}
struct detail_t
{
uint32_t gid;
uint32_t sid;
};
detail_t detail;
uint64_t subscriptionID;
};
Проблема решена ...?
В C ++ 0x вы сможете сделать это:
union subid_u
{
inline subid_u(uint32_t gid, uint32_t sid) : detail{gid, sid} {}
struct detail_t
{
uint32_t gid;
uint32_t sid;
};
detail_t detail;
uint64_t subscriptionID;
};