cannot specify explicit initializer for arrays

匿名 (未验证) 提交于 2019-12-03 01:57:01

问题:

I'm getting the following compile error...

error C2536: 'Player::Player::indices' : cannot specify explicit initializer for arrays 

why is this?

header

class Player { public:     Player();     ~Player();      float x;     float y;     float z;     float velocity;      const unsigned short indices[ 6 ];     const VertexPositionColor vertices[]; };

cpp

Player::Player() :     indices     {          3, 1, 0,         4, 2, 1      },     vertices{         { XMFLOAT3( -0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 0.0f ) },         { XMFLOAT3( -0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 1.0f ) },         { XMFLOAT3( 0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 0.0f ) },         { XMFLOAT3( 0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 1.0f ) }     } { }

EDIT TO SHOW MY ATTEMPT AT std::array

std::array indices; std::array  vertices;

can't get this to work either.

error C2661: 'std::array::array' : no overloaded function takes 6 arguments

and if I do this in my construct like the other post says:

indices( {      3, 1, 0,     4, 2, 1  } ), vertices ( {     { XMFLOAT3( -0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 0.0f ) },     { XMFLOAT3( -0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 1.0f ) },     { XMFLOAT3( 0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 0.0f ) },     { XMFLOAT3( 0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 1.0f ) } } )

it crashes the compiler...

EDIT:: Victory!

I put them in my cpp file babeh:

const unsigned short Player::indices[ 6 ] = {     3, 1, 0,     4, 2, 1 };  const VertexPositionColor Player::vertices[ 4 ] = {     { XMFLOAT3( -0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 0.0f ) },     { XMFLOAT3( -0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 1.0f ) },     { XMFLOAT3( 0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 0.0f ) },     { XMFLOAT3( 0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 1.0f ) } }

回答1:

As everyone else was saying, set the properties of my class to static const and then define them in the cpp file for the class:

header file:

class Player { public:     Player();     ~Player();      float x;     float y;     float z;     float velocity;      static const unsigned short indices[ 6 ];     static const VertexPositionColor vertices[ 4 ]; };

cpp:

const unsigned short Player::indices[ 6 ] = {     3, 1, 0,     4, 2, 1 };  const VertexPositionColor Player::vertices[ 4 ] = {     { XMFLOAT3( -0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 0.0f ) },     { XMFLOAT3( -0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 0.0f, 1.0f ) },     { XMFLOAT3( 0.5f, -0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 0.0f ) },     { XMFLOAT3( 0.5f, 0.5f, -0.5f ), XMFLOAT3( 0.0f, 1.0f, 1.0f ) } }


回答2:

The size of the array needs to be defined in the class definition. C++ doesn't support variable sized arrays, at least, not yet:

class Player {   public:     // ...     const unsigned short indices[ 6 ];     const VertexPositionColor vertices[4]; };

Assuming a suitable definition of VertexPositionColor this should be OK (it compiles with gcc and clang using -std=c++11).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!