gpt4 book ai didi

C++ 尝试设置指向新对象的指针

转载 作者:行者123 更新时间:2023-11-30 00:50:46 25 4
gpt4 key购买 nike

我的程序共有 10 个对象,创建时设置为一个对象指针,这里是对象指针; a1、b1、b2、c1、c2、c3、d1、d2、d3 和 d4。我最初将每个指针设置为 0。我对此进行测试,以便程序知道已经创建了哪些类型为 A、B、C 或 D 的对象。我的问题是程序没有做我想做的事,对于类型 B 对象,第一个应该由 b1 指向,然后下一个 B 对象应该由 b2 指向,同样对于 C 和 D。但是发生的事情是b1 改变了它指向的内容,而不是程序识别出 b1 已设置并移动到 b2。

这是类成员函数的一部分:

void Board::addShip(char type, int x1, int y1, int x2, int y2)
{
//Add a ship to the board. If the board already contains ten ships, the new ship should be ignored.
Ship *a1=0,*b1=0,*b2=0,*c1=0,*c2=0,*c3=0,*d1=0,*d2=0,*d3=0,*d4=0;
if (type == 'A' && a1==0)
{
cout << "a1" << endl;
a1 = new AircraftCarrier(x1,y1,x2,y2);
shipList.push_back(a1);
}
else if (type == 'B')
{
if (b1 == 0)
{
cout << "b1" << endl;
b1 = new BattleShip(x1,y1,x2,y2);
shipList.push_back(b1);
}
else if (b2 == 0)
{
cout << "b2" << endl;
b2 = new BattleShip(x1,y1,x2,y2);
shipList.push_back(b2);
}
}

cout 语句用于测试目的。

最佳答案

问题是 a1, b1... 都是 local variables automatic storage 在方法 addShip。因此,每次调用该方法时,都会创建这些变量并将其初始化为。这就是每次创建第一个的原因(因为例如 a1==0 每次都为真)。

存在几种解决方案:

  1. 您可以将变量设置为static,这样它们只会在第一次创建时保留它们的值。
  2. 更好的解决方案是让它们成为Board 类中的类成员,因为它们代表Board 的组件(我猜)。然后,您将在 Board 类的构造函数中将它们初始化为 0(更好的是 NULL/nullptr)。

关于C++ 尝试设置指向新对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com