aggregate initialisation

R

Raghu

Hello all,
Can somebody help me hopw to resolve teh probelm of aggregate initialisation
in c++.
Her eis the piece of code.

#include<stdio.h>

class MyTest
{
public:
DECLARE_AGGREGATABLE (MyTest);
MyTest(float input = 0.0f):Data(input){}
float Data;
};

struct MyStruct
{
MyTest a;
int b;
};
struct MyStruct test[2] = { {1.2f,1},{2.4f,3}};

int main()
{

printf("%f\n",test[0].a.Data);
return 0;
}

I am getting the compialtion error as follows:

error C2440: 'initializing' : cannot convert from 'const float' to 'struct
MyStruct'
No constructor could take the source type, or constructor overload
resolution was ambiguous.

And when i decalrea str4uct variable as follows:

struct MyStruct test = { 1.2f ,3 };
I am getting the following error:

error C2552: 'test' : non-aggregates cannot be initialized with initializer
list

Is there any option to use initaliser list toassign the UDTS aggregately?
Your help is needed at the earliest.

Thanks in Advance.
Raghu
 
B

benben

Raghu said:
Hello all,
Can somebody help me hopw to resolve teh probelm of aggregate initialisation
in c++.

What is aggregate initialization anyway? Aggregation can have a lot of
meanings in different contexts, which one are you talking about?
Her eis the piece of code.

#include<stdio.h>

class MyTest
{
public:
DECLARE_AGGREGATABLE (MyTest);

Well, what is DECLARE_AGGREGATEABLE? Either provide the definition of
that macro or provide the resultant (non-macro) code equivalent.
MyTest(float input = 0.0f):Data(input){}
float Data;
};

struct MyStruct
{
MyTest a;
int b;
};
struct MyStruct test[2] = { {1.2f,1},{2.4f,3}};

MyStruct test[] = {{MyTest(1.2f), 1}, {MyTest(2.4f), 3}};
int main()
{

printf("%f\n",test[0].a.Data);
return 0;
}

I am getting the compialtion error as follows:

error C2440: 'initializing' : cannot convert from 'const float' to 'struct
MyStruct'
No constructor could take the source type, or constructor overload
resolution was ambiguous.

And when i decalrea str4uct variable as follows:

struct MyStruct test = { 1.2f ,3 };

MyStruct test = {MyTest(1.2f), 3};
I am getting the following error:

error C2552: 'test' : non-aggregates cannot be initialized with initializer
list

Is there any option to use initaliser list toassign the UDTS aggregately?
Your help is needed at the earliest.

I still don't get why you need a macro for this matter but if you just
change the lines to those I wrote it should be all right...
Thanks in Advance.
Raghu

Regards,
Ben
 
R

Ron Natalie

Raghu said:
Hello all,
Can somebody help me hopw to resolve teh probelm of aggregate initialisation
in c++.
Her eis the piece of code.

#include<stdio.h>

class MyTest
{
public:
DECLARE_AGGREGATABLE (MyTest);

What does the above line mean?
 
R

Ron Natalie

benben said:
What is aggregate initialization anyway? Aggregation can have a lot of
meanings in different contexts, which one are you talking about?
The C++ standard defines aggregate. MyTest is not an aggregate (has
a user-defined constructor). However MyStruct is an aggregate. A
member that is not an aggregate itself is permitted in an aggregate.
(It's not like POD's where everything contained within must also be
POD).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top