0

私は苦労していて、次のコードが機能しない理由を理解しようとしています。

私は3つのクラスを次のように定義しています:

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;
};

アレイの初期化は次の目的で機能します。

PositionVertex vertices[] = { XMFLOAT3(0,0,0) };

しかし、私が初期化しようとすると:

PositionColorVertex vertices[] = {
{ XMFLOAT3(0,0,0), XMFLOAT4(0,0,0,1) } };

エラーが発生しますC2552非集計は初期化子リストで初期化できません。

PositionVertexが機能しているのに、PositionColorVertexが機能していないのはなぜですか?

4

1 に答える 1

1

PositionVertexが機能しているのに、PositionColorVertexが機能していないのはなぜですか?

最初のケースでは、集合体である配列を初期化しているためです。

PositionVertex vertices[] = { XMFLOAT3(0,0,0) };

2番目のケースでは、PositionVertexColor2つの要素を含む初期化子リストを使用してを初期化し、それを使用してサイズ1の配列を初期化しようとしています。最初の部分はC++11でのみ機能します。これを分割することで、より適切に視覚化できます。

PositionVertexColor vertices[] = { {XMFLOAT3(0,0,0), XMFLOAT4(0,0,0,1)} };

2つに:

PositionVertexColor pvc =  {XMFLOAT3(0,0,0), XMFLOAT4(0,0,0,1)}; // Error, non-aggregate.
PositionVertexColor vertices[] = { pvc }; // would be OK if first step had worked
于 2012-12-04T16:15:28.477 に答える