无法访问矢量类中的向量

时间:2014-10-03 15:17:20

标签: c++ vector

我制作了一个简单的矢量类,我在初始化对象时遇到了问题。这是我的计划/问题的基础:

int main() {
bla v1(100);

int i=0;  
while (i < 101) {
    v1.initialise(2.0, i);
    i++;
};
return 0;
}

头文件:

class bla {
private:
  int m_size;
  std::vector<double> v;
public:
  bla (int i) {
     m_size = i;
     std::vector<double> v(m_size);
  }
  void initialise(double gg, int i) {
     v[i] = gg;
  };  
}

似乎构造函数工作正常,但是当我尝试将v1的所有元素初始化为2.0时,存在分段错误,例如在initialise()内部无法到达v [i]。

欢迎任何帮助,

瑞安

2 个答案:

答案 0 :(得分:4)

变化:

bla (int i) {
   m_size = i;
   std::vector<double> v(m_size);
}

成:

bla (int i) : m_size(i), v(m_size) {
}

然后才

while (i < 101) {

成:

while (i < 100) {
//         ^^^

答案 1 :(得分:3)

bla (int i) {
   m_size = i;
   std::vector<double> v(m_size);
}

你有一个局部变量v,它隐藏了成员变量 您正在初始化本地向量以获得m_size元素,并且在构造函数完成时将其抛弃,使成员向量保持不变并且为空。 由于成员向量为空,v[i] = gg;对所有i无效。

您应该使用初始化列表:

  bla (int i): m_size(i), v(i) {}

此外,

while (i < 101)

会遍历范围[0, 100],其中包含 101 个元素,但您的向量只有100个。 这将导致更多问题,很可能是另一次崩溃。