std :: copy对象从文件读取到指针向量

时间:2014-04-05 09:47:31

标签: c++ pointers vector iterator copy

以下是我写的这个有2个变量的类,创建对象的方式是通过文件

  class CData {
int m_iTimeID;
double m_dData;

  friend istream& operator>>(istream& IS, CData* Obj){
    Obj = new CData();
    IS >> Obj->m_iTimeID >> Obj->m_dData;
    return IS;
} 

它应该是一个指针(我相信)

现在有另一个类,其变量是第一个类

的指针向量
  class CCalc3SigmaControl {
vector<CData*> m_vectorData; 

正在从文件读取数据的构造函数(这是我的问题所在的地方)

 CCalc3SigmaControl(const char* filename){

    ifstream FP(filename); 
    istream_iterator<CData*> begin_itt (FP);
            istream_iterator<CData*> end_source ;
    copy(begin_itt,end_source ,back_inserter(m_vectorData));  
}

我的任务是使用此部分中的复制算法!

现在,所有这些编译并运行程序,但是当它到达我试图从向量中获取数据的部分时(比如这个m_vectorData [i] - &gt; getData();)它返回一个错误它无法获取数据&#34;访问冲突读取位置0xCCCCCCD4。&#34;并且在m_dData和ID中它是&#34;无法读取内存&#34;。

现在我在副本上设置了一些断点,并且重载了&gt;&gt; 。操作员从文件中获取数据,但是当程序进入副本时,我的begin_itt指向没有值,并且它不向向量分配任何内容(只是推回空对象或GUESS的东西)。 我需要这个副本才能工作!

  void calcSigmas(){
    sigmaUp=0;   //a private of CCalc3SigmaControl
    sigmaDown=0;  //also
    double Mean = 0;
    double n = m_vectorData.size();
    for (int i=0;i<n;i++){
    Mean = Mean + m_vectorData[i]->getData();
    }
    sigmaUp = Mean + 3 * sqrt (abs((Mean * (1 - Mean))/n));
    sigmaDown = Mean - 3 * sqrt (abs((Mean * (1 - Mean))/n));
}

(CData中的getData函数:

   double getData() const {                 //GET DATA
    return m_dData;}

有。在我的主要功能中,我有:

 void main(){
 CCalc3SigmaControl A("Danni.txt");
 A.calcSigmas();

当它试图计算它们时会得到错误。 这就是它。我已经超载了&lt;&lt;&lt;&lt;&lt;在ccalc中,我可以在主要数据中输入数据。

0 个答案:

没有答案