我的列表有元素,但list.size()打印为零

时间:2014-11-18 02:20:13

标签: c++ list

首先,这是我的第一个问题,所以如果我做错了,我会道歉。

我的问题是:

我有一个名为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

谢谢!

1 个答案:

答案 0 :(得分:2)

generator()正在创建一个本地Warehouse对象,并将存款添加到该对象, NOT 将它们添加到Warehouse generator()对象中被叫了。这就是您打印的listDeposit为空的原因 - 您没有添加任何内容。如果要将存款添加到被调用对象,则需要删除该本地Warehouse对象,并将w1.addDeposit(...)替换为this->addDeposit()或简单地addDeposit(...)