属性向量清空自​​己

时间:2010-05-31 20:26:41

标签: c++

我有两个类,派生自一个普通的类。 公共类有一个名为execute()的纯虚函数,它在两个派生类中实现。 在继承的类中,我有一个属性,它是一个向量。在两个execute()方法中,我用结果覆盖此向量。我从指向其对象的指针向量访问这两个类。 问题是当我尝试访问对象外部的结果向量形式时。在一种情况下,我可以获得元素(它们只是指针),而在另一种情况下,我不能,矢量是空的。

代码:

class E;
class A{
  protected:
    vector<E*> _result;
  public:
    virtual void execute()=0;
    vector<E*> get_result();
};
vector<E*> A::get_result()
{
   return _result;
}
class B : public A
{
  public:
    virtual void execute();
};
B::execute()
{
   //...
   _result = tempVec;
   return;
}
class C : public A
{
  public:
    virtual void execute();
};
C::execute()
{
   //different stuff to B
   _result = tempvec;
   return;
}
main()
{
  B* b = new B();
  C* c = new C();
  b->execute();
  c->execute();
  b->get_result();//returns full vector
  c->get_result(); //returns empty vector!!
}

我不知道这里发生了什么......我试图从违规类中的临时向量手工填充_result,对vector :: assign()做同样的事情,没有任何效果。另一个对象完美无缺。我肯定错过了什么.... 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

由于课程BC之间的其他内容相同,我不得不说行

//different stuff to B

可能很重要!

此外,您的get_result()方法应该是

const vector<E*>& get_result() const;

每次都保存你制作矢量的副本。

答案 1 :(得分:0)

我想知道tempVec来自哪里,但在Troubadour的回应之后,我意识到你在省略代码。那里必须有一个问题,因为此时我没有看到代码出现任何问题。

答案 2 :(得分:0)

我想我知道是怎么回事。在B类中:: execute方法是保存tempVec,(V - 很大),在C类中保存tempvec。好吧,tempVec - 不是空的,tempvec - 是空的。看不出有什么不妥。