2016-01-18 185 views
0

類似的主題已經被覆蓋,雖然我從來沒有找到答案。 我的代碼相關片段:C++填充結構的2D矢量

struct Neuron 
{ 
    double weight; 
}; 

typedef vector<Neuron> Layer; 

vector<Layer> n_N; // Hopefully creating a vector of layers, which takes in neuron structs 

然後我嘗試加載神經元結構到N_N在for循環像這樣:

n_N[i][neuronNum].push_back(Neuron); 

在我undertanding中,[i]爲行數,那麼[neuronNum]在列

個數,但我得到一個錯誤:「結構神經元」沒有名爲「的push_back」成員

+0

您還沒有申報2D矢量。 'std :: vector >'將是一種方法。 –

+0

@JonathanPotter他實際上只是間接使用'typedef' – silvergasp

+0

我的問題是推到載體上 –

回答

0

您的問題是,你是TR你可以調用一個叫做push_back()的函數,它包含在你的結構中。由於你沒有一個名爲push_back()的成員函數,它會給你和錯誤。這可以通過刪除循環中使用的訪問說明符中的第二個索引來解決。這將工作,因爲您試圖訪問Nuerons的矢量不是Nuerons矢量的成員。

例如

更改此:

n_N[i][neuronNum].push_back(Neuron()); 

要這樣:

n_N[i].push_back(Neuron()); 

編輯:(感謝MM指出這一點)

上述解決方案僅會如果n_n [i]存在並且不超出範圍o,則工作向量(這會導致未定義的行爲)。爲了解決這個問題,我建議使用下面的一個for循環。

// Range based for loop. (requires c++11 or greater) 
for(auto &i: n_N) {i.push_back(Neuron());) 

// Standard for loop taking into account the current size of the vector. 
for(size_t i = 0; i < n_N.size(); i++) {n_N[i].push_back(Neuron());} 

// Iterator for loop. 
for(std::vector<std::vector<Neuron> >::iterator it = v.begin(); it != v.end(); ++it) { 
    n_N[it].push_back(Neuron()); 
} 
+0

謝謝。在這個變化之後,它期待在''''' –

+0

之前有一個主要表達式嗎?它是否要我設置權重,或者放置括號 –

+0

@ Sgt.Sarcasm您能顯示完整的錯誤信息嗎? – silvergasp