c++ - 在类中将静态数组更改为动态数组
问题描述
该代码应该从文本文件中读取行,其中每一行都是 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;
}
该程序编译但给出了一个指针错误,我无法解决。
解决方案
推荐阅读
- excel - 如何根据与另一列的完全匹配对列进行排序
- flask - 带有 websockets 和 flask-socketio 的 Python 到 Python WebSockets
- java - 如果条件可以为真或假,为什么有必要
- jquery-selectors - Cheerio:选择多个输入的值
- mysql - 如何在mysql中实现join
- c# - 如何修复 json 转换为 c# 类?
- gmail - 如何使用 GMAIL API 仅获取具有模式标记(如事务标记)的电子邮件?
- python - 如何按文件扩展名的有序列表对 python 文件列表进行排序
- c++ - 如何以准确的方式找到标记的中心?
- javascript - 检查 id jquery 对象是否为空