Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

error: aggregate value used where an integer was expected

Writer 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.

3

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.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy