C ++调用类的向量'另一个班级的方法

时间:2015-03-19 11:59:38

标签: c++

class C {
  public: void c_set(int x){ a = x; }
  private: int a;
}
;
 class U {
  public: void load();
         c_loader(int i, int x){ c[i].c_set(x); };
  private: vector<C> c(20);
}
;
 void U::load() {
  int x;
  cin >> x >> i;
  c_loader(i, x)
}

我真的很困惑这个。我需要在另一个中调用成员函数,但我的问题是内部类是该类的向量。我的代码应该可以工作,但结果是段错误。假设函数cget有定义。

1 个答案:

答案 0 :(得分:1)

问题有点不清楚,但试着这样做以防止段错误。

class C {
  public: void cget(int a);
  private: int a;
};

class U {
  public: void load();

  vector<C> c;    // Note: c is made public in order to add elements from main
};

 void U::load(unsigned x, int a) {
  if (x < c.size())   // Check the size of c _before_ access
  {
    c[x].cget(a);
  }
}

void main()
{
  U u;
  C c;
  u.c.push_back(c);
  u.load(0, 3);  // Will end up calling cget
  u.load(1, 3);  // Will just return without calling cget
}

编辑: 只是想提一下,问题中的代码已经改变了很多我的答案。这解释了为什么我的代码看起来很不一样;-) 在任何情况下,答案仍然是:在访问之前检查c的大小。