我有两个类,派生自一个普通的类。 公共类有一个名为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()做同样的事情,没有任何效果。另一个对象完美无缺。我肯定错过了什么.... 任何帮助将不胜感激。
答案 0 :(得分:3)
由于课程B
和C
之间的其他内容相同,我不得不说行
//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 - 是空的。看不出有什么不妥。