2010-05-31 72 views
0

我有两个类,从一个普通的类派生。 公共类有一个名为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手工,做同样与向量::分配( ),没有任何工作。另一个对象完美地工作。我必须错过一些东西.... 任何帮助将不胜感激。

+0

这是*真正的*代码产生的错误,或只是一个近似? 这个例子不会编译 - tempvec/tempVec未声明。 – SigTerm 2010-05-31 20:31:40

回答

3

因为一切是类BC间同我不得不说的是,线

//different stuff to B 

可能是重要的!

而且你get_result()方法真的应该

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

救你做每一次载体的拷贝。

+0

我同意,问题可能在别的地方,显示的代码似乎对我完全正常。 – PeterK 2010-05-31 20:38:58

+0

有一些区别,它们处理不同的矢量:tempVec和tempvec。 – Max 2010-05-31 20:42:43

+1

好的,我发现了这个错误,当然与显示的代码无关。我从A *矢量访问我的对象,并且我编写了硬编码和索引。所以它看着错误的对象。通常我花了一个小时看,在这里发布了问题,并及时发现问题... 非常感谢! – 2010-05-31 20:44:17

0

我想知道tempVec从哪里来,但在Troubadour的回应后,我意识到你正在省略代码。这里有一个问题,因为在这一点上我没有看到代码出现任何问题。

+0

好的,我发现了这个错误,它当然与显示的代码无关。我从A *矢量访问我的对象,并且我编写了硬编码和索引。所以它看着错误的对象。通常我花了一个小时看,在这里发布了问题,并及时发现问题... 非常感谢! – 2010-05-31 20:45:06

0

我想我知道什么事情。在类B :: execute方法中保存tempVec,(V - 很大),在C类中保存tempvec。好吧,tempVec - 不是空的,tempvec - 是空的。没有看到任何错误。

+0

好吧,我发现了这个错误,当然与显示的代码无关。我从A *矢量访问我的对象,并且我编写了硬编码和索引。所以它看着错误的对象。通常我花了一个小时看,在这里发布了问题,并及时发现问题... 非常感谢! – 2010-05-31 20:44:45