【发布时间】:2015-08-12 17:35:34
【问题描述】:
我正在开发一个数组系统以用作库存,我需要数组具有全局范围,以便可以在整个程序中对其进行修改。我在头文件中声明了它的枚举器,如下所示:
#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
然而,这在较低的语句上引发了一个错误,因为它试图将其声明为自己的数组,或者因为它试图将值初始化为枚举。我可以将它放在一个函数中并像这样解决这个问题:
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;
}
item 抛出未定义的错误,使函数无用。我不确定我错过了什么,但如果我能克服这个障碍,我终于可以完成这个库存系统。
【问题讨论】:
-
您在两个不同的地方有以下行
defineItemArray(item);我假设它应该是defineItemArray(items); -
是的,但是我改变了它,它仍然会为项目抛出一个未定义的错误,这次只是针对参数中的那个。
-
不能在全局范围内做作业
-
@NathanOliver,我可以解决这个问题,我真的只需要知道为什么它将项目显示为未定义,在我修复之后我认为我可以解决剩下的问题。
-
@SawyerAdlaiVierra-Hatch 第一:不要使用全局变量,而是使用函数参数或类成员变量!
标签: c++ arrays enums header global