2016-01-18 59 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