Push_back在对象的二维向量中

时间:2014-01-27 17:04:20

标签: c++ vector push-back

我在名为“FactoryCircuit”的“工厂”类中有一个名为“circuito”(电路)的对象矢量向量。

vector< vector< Elemento*> > 

“Elemento”是三个派生类的基类,名为“resistenza,induttanza,conduttanza”(电阻,电感,电导)。这三个类是RCL组件。 (在这个程序中,我必须计算I和Z。)

在INNER向量的每个“位置”,我只能push_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();"

当我创建课程时这是可以的... 我做了很多尝试,以了解问题在哪里,但现在我不知道做什么:( 谢谢你的回复!

1 个答案:

答案 0 :(得分:0)

你的例子:

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:分段错误

您必须首先初始化数据,或者在尝试调用它们之前检查它们是否为空。