我正在开发一个数组系统作为库存,我需要数组具有全局范围,以便可以在整个程序中进行修改。我已经在头文件中声明了它的枚举器,如下所示:
#include "stdafx.h"
#include <iostream>
#ifndef ITEMSARRAY_H
#define ITEMSARRAY_H
using namespace std;
enum Weapons
{
LASER_RIFLE,
LASER_SWORD,
LASER_PISTOL,
PLASMA_LAUNCHER,
MAX_ITEMS
};
bool items[MAX_ITEMS];
items[LASER_RIFLE] = true;
items[LASER_SWORD] = false;
items[LASER_PISTOL] = false;
items[PLASMA_LAUNCHER] = true;
#endif
但是这会在下层语句中抛出一个错误,因为它试图将它声明为它自己的数组,或者因为它试图将值初始化为enum.I可以将它放在一个函数中并像这样解决这个问题: / p>
void defineItemArray(bool items[MAX_ITEMS])
{
items[LASER_RIFLE] = true;
items[LASER_SWORD] = false;
items[LASER_PISTOL] = false;
items[PLASMA_LAUNCHER] = true;
}
这个问题就是当我尝试使用该函数时,参数项不会像这样拉数组:
#include "stdafx.h"
#include <iostream>
#include "itemsArray.h"
using namespace std;
void playerInventory()
{
defineItemArray(items);
for (int item = 0; item < MAX_ITEMS; ++item)
if (items[item] == true)
{
switch (item)
{
case 0:
cout << "Laser Rifle\n";
break;
case 1:
cout << "Laser Sword\n";
break;
case 2:
cout << "Laser Pistol\n";
break;
case 3:
cout << "Plasma Launcher \n";
break;
default:
cout << "Error";
break;
}
}
else
cout << "Not in Inventory\n";
}
void playerGet()
{
defineItemArray(items);
cout << "You have found a Laser Sword.\n";
cout << "Laser Sword added to inventory.\n";
items[LASER_SWORD] = true;
}
int main()
{
playerInventory();
playerGet();
playerInventory();
return 0;
}
项会抛出一个未定义的错误,使该函数无效。我不确定我错过了什么,但如果我能够克服这个障碍,我终于可以完成这个库存系统了。
答案 0 :(得分:1)
选项1:
您可以在itemsArray.c中全局定义items
数组,如下所示:
// itemsArray.c
bool items[MAX_ITEMS] = {true, false, false, true};
要使数组可以从其他文件访问,请将以下内容添加到itemsArray.h:
// itemsArray.h
extern bool items[MAX_ITEMS];
在您必须访问items数组的文件中包含itemsArray.h。
不需要函数defineItemArray()
。
注意:的
extern
被视为“糟糕”设计 选项2:
重构defineItemArray()
函数,以便初始化先前定义的数组:
void defineItemArray(bool items[])
{
items[LASER_RIFLE] = true;
items[LASER_SWORD] = false;
items[LASER_PISTOL] = false;
items[PLASMA_LAUNCHER] = true;
}
然后你可以像这样使用它:
void playerInventory()
{
bool items[MAX_ITEMS]; // define the items array
defineItemArray(items); // initialize the items array
for (int item = 0; item < MAX_ITEMS; ++item)
...
答案 1 :(得分:1)
这些行:
items[LASER_RIFLE] = true;
items[LASER_SWORD] = false;
items[LASER_PISTOL] = false;
items[PLASMA_LAUNCHER] = true;
在包含在全局范围内的头文件中无效。
而是将此代码放在c文件中:
bool items[MAX_ITEMS] = {true, false, false, true};
在头文件中,您只能使用以下行:
extern bool items[MAX_ITEMS];
然后,您可以在包含头文件的所有c文件中使用变量项。而且您不需要将变量项传递给任何函数,因为它是一个全局变量。顺便说一句 - 全局变量一般都很糟糕,但如果你真的想要一个全局变量,就可以这样做。