2014-01-27 31 views
0

的2維矢量我有命名爲「CIRCUITO」(電路)在名爲「FactoryCircuit」一個「工廠」類對象矢量的矢量。的push_back在對象

vector< vector< Elemento*> > 

「Elemento的」 是一個基類名爲 「resistenza,induttanza,conduttanza」(電阻,電感,電導)3派生類。這三個類是RCL組件。 (在該程序中,我必須計算I和Z.)

在內側矢量I可以只的push_back相同的組件的每一個「地點」。然後我把它們當作平行組件。 組件串聯的外部矢量rapresent位置。 因此,例如在[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

您可以顯示更多的類factoryCircuiti的?乍一看,它看起來像你的建設者不是初始化成員,而是用局部變量隱藏它。 (請嘗試更改您的構造函數'FactoryCircuiti :: FactoryCircuiti():ciruito(1){}' – IdeaHat

+0

該類得到了其他兩個變量可以用兩個成員函數進行修改。但問題不在這裏,因爲當我建立工廠時,我遵循以下路徑:1)工廠和兩個變量和構造函數和析構函數。沒關係2)構建成員函數。沒關係3)構建向量和「Crea Resistenza」等等......沒關係......但是當我使用主要...時:P感謝您的幫助! – Keys88

回答

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(); 

OK,它的存在

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

問題,不存在時,指針爲NULL:分段故障

你必須首先初始化數據或檢查,如果他們不試圖調用之前甲基空在他們身上。

+0

我該如何解決直接在成員函數中的問題? 或者問題不在成員函數中,而是在主函數中? – Keys88

+0

也許我明白...我只創建指針,而不是對象!這樣對嗎? – Keys88

+0

是的,你創建了一個包含3個不包含任何內容的其他向量的大小爲3的向量。添加元素時其他矢量的大小會增加,然後如果向矢量添加一個元素,則只有第一個元素可以訪問,然後嘗試訪問第二個元素:出現問題。 – dkg