首先,这是我的第一个问题,所以如果我做错了,我会道歉。
我的问题是:
我有一个名为Warehouse的类,这个类有一个存款列表。
class Warehouse : {
private:
list<Deposit*> listDeposit;
Class Deposit是FreshDeposit和NormalDeposit的超类。
我在Warehouse类中实现了一个方法(addDeposti()
),以便将存款添加到列表中,并且工作正常。在方法的最后,我放置了打印cout << listDeposit.size()
并打印了正确的尺寸。我已经实现了一个名为Generator的方法。该方法的功能是创建随机存款来测试程序。当我尝试使用此方法中的listDeposit
时,列表始终为空,但实际上它有元素。
Generator方法:
void Warehouse::generator() {
srand((unsigned int)time(NULL));
//creating a Normal deposit
//numeroRandom() is a function to generate random numbers
Deposit *n1 = new Normal(numeroRandom(1, 20), numeroRandom(7, 15), numeroRandom(5, 10), numeroRandom(1, 5));
//creating a Fresh deposit
Deposito *f1 = new Fresh (numeroRandom(1, 20), numeroRandom(8, 15), numeroRandom(4, 10), numeroRandom(2, 5));
//creating a Warehouse
Warehouse w1(numeroRandom(10, 30), numeroRandom(10, 20), numeroRandom(5, 10), numeroRandom(5, 10), numeroRandom(5, 10), numeroRandom(5, 10));
//fresh and normal deposit (f1,n1) are being added to the listDeposit in this method;
//as said, addDeposit() method is working fine.
w1.addDeposit((*f1));
w1.addDeposit((*n1));
//cout prints zero but in reality the listDeposit got size 2.
cout << "I'm HERE!" << endl << listDeposit.size() << endl;
}
我的'主':
int main(int argc, char** argv) {
Warehouse();
cin.get();
return 0;
}
'Warehouse()'构造函数:
Warehouse::Warehouse() :{
generator();
}
如果有人能帮助我,我将非常感激! :d
谢谢!
答案 0 :(得分:2)
generator()
正在创建一个本地Warehouse
对象,并将存款添加到该对象, NOT 将它们添加到Warehouse
generator()
对象中被叫了。这就是您打印的listDeposit
为空的原因 - 您没有添加任何内容。如果要将存款添加到被调用对象,则需要删除该本地Warehouse
对象,并将w1.addDeposit(...)
替换为this->addDeposit()
或简单地addDeposit(...)
。