简体   繁体   English

卡在构造函数C ++中

[英]Stuck in constructor c++

I have a main function that creates instances of a class Simulation within a for loop, and in the constructor of Simulation , there is a for loop which creates instances of pointers to Populations . 我有一个for循环内创建一个类模拟的情况下,一个主要功能,并在模拟的构造,有一个for循环它创建指向人群的实例。

My issue is that from the output, I know that the constructor of Simulation finishes pushing back on its vector of Population* but it doesn't seem like it really leaves the constructor because the for loop in the main doesn't continue. 我的问题是,从输出中,我知道Simulation的构造函数完成了将其向量*填充回去的操作,但由于主循环中的for循环不会继续进行,因此它似乎并未真正离开构造函数。 Thank you very very much! 非常非常感谢你!

Snippet from main : 主要片段:

std::vector<Simulation> openSimulations ; 
       for(size_t i(0) ; i < n ; ++i)
       {
           std::cout << "Rounds that should be completed : " << n << std::endl ; 
           std::cout << "Stuck 3 !" << std::endl ;
           openSimulations.push_back(Simulation(f, n, t, p, M, m)) ;
           std::cout << "Finished adding!" << std::endl ; 
       }

Snippet from Simulation 仿真片段

Simulation::Simulation(std::vector<double> pInitialFrequencies, int pPopSize, 
        int pGenerationNumber, int pPopulationNumber, bool pMigration,
        double pMigrationProbability )
:myGenerationNumber(pGenerationNumber), migration(pMigration),
    myMigrationProbability(pMigrationProbability)
{
    std::cout << "Stuck 6 !" << std::endl ;
    for(int i(0) ; i < pPopulationNumber ; i++ )
    {
        myPopulations.push_back(new Population(pInitialFrequencies,
            pGenerationNumber, pPopSize,  myMigrationProbability)) ;
        std::cout << "Stuck 7 !" << std::endl ;
    }

    std::cout << "Have exited or loop in Simulation::Simulation!" << std::endl ;

}

Here is my output from Terminal : 这是我从Terminal的输出:

Dimitris-MacBook-Pro:CMakeTemp Dimi$ ./Genomics  -n 5 -f 0.2 -f 0.2 -f 0.6 -T 100 -N 100 -A 3  -r 3
Rounds that should be completed : 5
Stuck 3 !
Stuck 6 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Have exited or loop in Simulation::Simulation!
Finished adding!
Rounds that should be completed : 5
Stuck 3 !
Stuck 6 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Have exited or loop in Simulation::Simulation!

Hello everybody I found the answer to my own problem! 大家好,我找到了自己问题的答案!

The destructor of Simulation was improperly made. Simulation的析构函数是不正确的。

With the destructor like this, it works now : 有了这样的析构函数,它现在可以工作了:

Simulation::~Simulation()
{
    for(auto population: myPopulations)
    {
        population = nullptr ;
        delete population ;
    }
}

I'll just leave the question here in case anybody comes across the same problem.. 如果有人遇到相同的问题,我将在这里留下问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM