我在名为“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();"
当我创建课程时这是可以的... 我做了很多尝试,以了解问题在哪里,但现在我不知道做什么:( 谢谢你的回复!
答案 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:分段错误
您必须首先初始化数据,或者在尝试调用它们之前检查它们是否为空。