push_back在对象的2维向量中

Push_back in 2 dimension vector of objects

本文关键字:2维 向量 对象 back push      更新时间:2023-10-16

我在名为" factory circuit"的"工厂"类中有一个名为"电路"(电路)的对象向量的向量。

vector< vector< Elemento*> > 

" Elemento"是三个派生类别的基类,称为" complateenza,induttanza,concuttanza"(电阻,电感,电导)。这三个类是RCL组件。(在此程序中,我必须计算I和Z。)

在内部矢量的每个"位置"中,我只能按照相同的组件来推动_back。然后我将它们视为平行组件。组件串联的外部矢量说明位置。因此,例如,在[0]的位置,我可以具有一种电阻,在[1]两个电感中,在[2]四个电容中...

,如果我尝试复制该示例,我可以在main.cpp中进行此操作:

vector< vector<Elemento*> > circuito(3);   
circuito[0].push_back(new Resistenza());
circuito[2].push_back(new Conduttanza());
circuito[2].push_back(new Conduttanza());  --->these "new" functions are three constructorS of the derived classes
circuito[2].push_back(new Conduttanza());
circuito[2].push_back(new Conduttanza());
circuito[1].push_back(new Induttanza());
circuito[1].push_back(new Induttanza());
circuito[0][0]->print();
circuito[0][1]->print();    //member function or R,C,L
circuito[0][2]->print();

这是正确的,但是当我运行时它会崩溃。我的目标是在工厂中创建三个成员功能,这些功能创建R,C,L,但在此之前,我必须了解如何使用向量....

我尝试在名为" crearesistenza"的工厂中创建一个成员功能,但也崩溃了:

工厂:

include ....etc....
FactoryCircuiti::FactoryCircuiti(){
vector< vector<Elemento*> > circuito(1);
}
FactoryCircuiti::~FactoryCircuiti(){
}
void FactoryCircuiti::CreaResistenza(double a) {circuito[0].push_back( new Resistenza(a) );}

//这最后一行是有罪的!当我使用此成员函数时,它会导致程序的崩溃!

相反,如果我放入构造函数"

circuito[0].push_back(new Induttanza());
circuito[1].push_back(new Resistenza());
circuito[0][0]=(new Conduttanza());
circuito[0][0]->print();"

当我创建类...我做了很多尝试,以理解问题在哪里,但是现在我不知道该怎么办:(感谢您的回复!

您的示例:

vector< vector<Elemento*> > circuito(3);   
circuito[0].push_back(new Resistenza());
circuito[2].push_back(new Conduttanza());
circuito[2].push_back(new Conduttanza());  --->these "new" functions are three constructorS of the derived classes
circuito[2].push_back(new Conduttanza());
circuito[2].push_back(new Conduttanza());
circuito[1].push_back(new Induttanza());
circuito[1].push_back(new Induttanza());
circuito[0][0]->print();
circuito[0][1]->print();    //member function or R,C,L
circuito[0][2]->print();

它创建了一个3个向量的向量,我将以这种方式表示数据:

circuito {
    [0] : {
        [0] Resistenza
    }
    [1] : {
        [0] Induttanza
        [1] Induttanza
    } 
    [2] : {
        [0] Conduttanza
        [1] Conduttanza
        [2] Conduttanza
        [3] Conduttanza
    }
}

然后,您要打印:

  circuito[0][0]->print();

好吧,它存在

  circuito[0][1]->print();

问题,不存在,指针为null:分段故障

您必须先初始化数据或在尝试调用它们的方法之前检查它们是否不是null。