2D 数组中的"Excess elements in scalar initializer"错误



我需要在游戏中使用二维数组,所以;

首先,我在名为"HelloWorldScene.h"的头文件中这样声明它:

using namespace cocos2d;
class HelloWorld : public Layer
{
private:
...
int upgradeCosts[4][4];
...
}

然后我尝试在名为"HelloWorldScene.cpp"的源文件中定义它:

#include "HelloWorldScene.h"
...
bool HelloWorld::init()
{
....
upgradeCosts[4][4] = {{150, 250, 900, 1800},
{100, 200, 600, 1200},
{200, 350, 1200, 2000},
{150, 300, 1000, 1900}};
...
}

但它给了我这个错误:"标量初始值设定项中的多余元素">

括号{{150, ...... , 1900 }}之间的整个代码都用红色下划线。我不知道该怎么办,请帮帮我。

这样初始化整个数组是绝对错误的:

upgradeCosts[4][4] = {{150, 250, 900, 1800},
{100, 200, 600, 1200},
{200, 350, 1200, 2000},
{150, 300, 1000, 1900}};

因为您只是设置了[4][4]元素,而不是整个数组。这就是Excess elements in scalar initializer错误所指的。int是一个标量,它只能用1个值初始化,但你试图用16个值初始化它。

为了纠正这一点,你会假设你可以这样做:

bool HelloWorld::init()
{
upgradeCosts = {{150, 250, 900, 1800},
{100, 200, 600, 1200},
{200, 350, 1200, 2000},
{150, 300, 1000, 1900}};
}

然而,这将不起作用,因为upgradeCostsHelloWorld的构建过程中已经默认初始化,并且不能再次初始化。

一个简单的解决方案如下:

bool HelloWorld::init()
{
int data[4][4] = {{150, 250, 900, 1800},
{100, 200, 600, 1200},
{200, 350, 1200, 2000},
{150, 300, 1000, 1900}};
for(int i = 0;i < 3;i++)
for(int j = 0;j < 3;j++)
upgradeCosts[i][j] = data[i][j];
...
}

然而,这涉及到毫无意义的复制。一个更好的解决方案是将数组初始化完全从init方法中移除。您可以通过在头文件中初始化数组来实现这一点:

// hpp file
class HelloWorld
{
private:
int upgradeCosts[4][4] = {{150, 250, 900, 1800},
{100, 200, 600, 1200},
{200, 350, 1200, 2000},
{150, 300, 1000, 1900}};
public:
bool init();
};

或者你可以在HelloWorld:的构造函数中初始化它

// hpp file
class HelloWorld
{
private:
int upgradeCosts[4][4];
public:
HelloWorld();
bool init();
};
// cpp file
HelloWorld::HelloWorld()
: upgradeCosts{{150, 250, 900, 1800},
{100, 200, 600, 1200},
{200, 350, 1200, 2000},
{150, 300, 1000, 1900}}
{ }

或者,如果你知道你的upgradeCostsHelloWorld的所有实例中都应该是相同的,你可以使用static成员并像下面这样初始化它:

// hpp file
class HelloWorld
{
private:
const static int upgradeCosts[4][4];
public:
bool init();
};
// cpp file
const int HelloWorld::upgradeCosts[4][4] = {{150, 250, 900, 1800},
{100, 200, 600, 1200},
{200, 350, 1200, 2000},
{150, 300, 1000, 1900}};

相关内容

  • 没有找到相关文章

最新更新