最近我正在开发一个简单的游戏,游戏结构要求我声明许多类型的对象...并且为了使函数更容易处理,我为所有其他类创建了一个父类。这是整个代码的一部分(简化):
int q=500;
struct ship
{
int x,y;
bool dec=0;
};
struct enemysol : public ship
{
int life=100,y=0,x;
bool dec=0;
void declare()
{
dec=1;
x=10+rand()%(getmaxx()-20);
life=100;
y=0;
}
};
int next(ship main[]) //finding next undeclared sol
{
int i=1;
while(main[i].dec)
{
i++;
if(i==q)
return -1;
}
return i;
}
问题是即使next
,i
函数也会返回enemysol.dec=1
当我没有声明ship
时,这段代码有效,但如果我没有声明它,项目会非常混乱和大。
答案 0 :(得分:2)
您使用错误的方法初始化enemysol
类的成员变量。
当你写:
int life=100,y=0,x;
bool dec=0;
您声明新成员变量,其名称与ship
中已有的x,y和dec相同。因此,每当您在enemysol类中使用x,y或dec时,您都不会引用船舶变量,因为这些变量是隐藏的。
正确的做法是:
struct enemysol : public ship
{
int life; // define only additional member variables not already in ship
enemysol() // constructor
: y(0), dec(false), life(100) // init members
{
}
void declare()
{
dec=1;
x=10+rand()%(getmaxx()-20);
life=100;
y=0;
}
};