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

标签 c++ pointers object

我的程序共有 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/

相关文章:

c++ - 虚函数的动态绑定(bind)

c++ - 指向对象数组中函数的指针数组

c - 如何将文件指针移动到文件的下一行?

C++ Mysql Real Escape 字符串问题

c++ - 构造函数中的模板冲突

c++ - boost序列化库有用吗?为什么不支持 "pointer to pointer"序列化?

javascript - DataTables Javascript数据源 'No Data Available'

javascript - 根据索引替换数组中的对象

Javascript对象继承

c++ - 如何在 Bloodshed 的 Dev-C++ 中切换调试和发布