首页 > 解决方案 > 在类中将静态数组更改为动态数组

问题描述

该代码应该从文本文件中读取行,其中每一行都是 Class1 的对象,并将它们放在 Class2 对象的列表中。我正在尝试将所有静态数组更改为动态数组,但没有运气。

该计划包括两个课程。Class1 包括日期、名称等属性。 Class2 是 class1 对象的列表。我没有包括程序的所有方法。Class1 对象是通过读取文件正确形成的。

当我试图将对象从 class1 复制到 Class2 中的动态属性收据时,就会出现问题。

测试表明程序在“rece[amountr- 1] = R;”处停止。有人可以帮我弄清楚我错过了什么吗?提前致谢。

class receipt // 1
 {
  private:
      string date;
      string name;
      int amount;
      string *friends;

  public:
      receipt();
      ~receipt();
      receipt& operator=( const receipt& R);
      bool readreceipt( istream &is );
};

class receiptlist     // 2
 {
  private:
      int amountr;
      receipt *rece;

  public:
      receiptlist();
      ~receiptlist();
      void resize ( int n );
      void readin ( istream & is );
      void addOne( receipt & R );
};

Main:
receiptlist RL;
ifstream is( "supermarkadoreceipts.txt" );
RL.readin (is)


Constructor:
receiptlist::receiptlist()
{
    amountr = 0;
    rece = new receipt [amountr ];
    receipt *rece = 0;
}

receipt & receipt::operator=( const receipt & R)
{
  if (this != &R)
    {
      delete[] friends;
      date = R.date ;
      name = R.name;
      amount = R.amount;
      friends = new string[amount];
      for (int i=0; i < amount; i++)
        friends [i] = R.friends [i];
    }
  return *this;
}

Methods:
void receiptlist::readin ( istream & is )
{
    receipt *rece = 0;

    receipt  R;

    while (R.readreceipt(is))
    {
        addOne(R);
    }
}

void receiptlist::addOne( receipt  & R ) 
{
    resize(amountr+ 1);
    rece[amountr- 1] = R;
}

void receiptlist::resize( int n )
{
    receipt *p = 0;

    if ( n > 0 )
    {
      p = new receipt[n];

      int i
      for (i = 0; i < n && i < amountr; i++ )
      {
          p[i] = rece[i];
      }

    }
    delete [] rece;
    rece = p;
    amountr = n;
}

该程序编译但给出了一个指针错误,我无法解决。

标签: c++

解决方案


推荐阅读