error: aggregate value used where an integer was expected
Andrew Mclaughlin
I am having following union
union data { uint64_t val; struct{ .... }
};and I have a function
func(union data mydata[])
{ printf("%llu",(uint64_t)mydata[0]); // Here is the error
}When i compile this code it is giving following error
error: aggregate value used where an integer was expected 2 Answers
You are failing to access a field of the indexed union array: mydata[0] is a value of type union data, and can't be cast to uint64_t.
You need to access the proper union member:
printf("%" PRIu64, mydata[0].val);to select the uint64_t value. No need for the cast.
Also: Use PRIu64 to portably print 64-bit values, you can't assume that %llu is the right format specifier.
The "dirty" solution to access the first member of the nth element of the array of unions pointed to by mydata as an int64_t without knowing its name is:
#include <inttypes.h>
#include <stdio.h>
union data
{ uint64_t val; ...
};
func(union data mydata[])
{ size_t n = 3; printf("%"PRIu64, *((uint64_t *)(mydata + n));
}This works as the first member's address of a union or struct is guaranteed to be the same as the address of the union or struct itself.