i’m struggling and trying to understand why the following code is not working.
I have 3 classes defined as:
class VertexType
{
public:
VertexType(void) { };
virtual ~VertexType() = 0;
};
class PositionColorVertex
: public VertexType
{
public:
PositionColorVertex(XMFLOAT3 _position, XMFLOAT4 _color)
:Position(_position), Color(_color)
{};
~PositionColorVertex() {};
static const UINT size = 28;
XMFLOAT3 Position;
XMFLOAT4 Color;
};
class PositionVertex
: public VertexType
{
public:
PositionVertex(XMFLOAT3 _position)
:Position(_position)
{};
~PositionVertex() {};
static const UINT size = 12;
XMFLOAT3 Position;
};
The array initialization is working for:
PositionVertex vertices[] = { XMFLOAT3(0,0,0) };
but when i try to initialize with:
PositionColorVertex vertices[] = {
{ XMFLOAT3(0,0,0), XMFLOAT4(0,0,0,1) } };
i get an error C2552 non-aggregates cannot be initialized with initializer list.
Why PositionVertex is working whereas PositionColorVertex isn’t ?
Because in the first case you are initializing an array, which is an aggregate:
In the second case, you are attempting to initialize a
PositionVertexColorwith an initializer list containing two elements, then use that to initialize a size-1 array. The first part only works in C++11. You can visualize it better by splitting this:into two: