无法从文件复制到指向对象的指针的向量

时间:2019-03-08 17:40:12

标签: c++ pointers vector copy

所以我有一个名为<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listItem" android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="1"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/na" android:textColor="@color/black" android:textSize="@dimen/text_size_normal" android:textStyle="bold" /> <TextView android:id="@+id/dose" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/na" android:textColor="#006600" android:textSize="@dimen/text_size_normal" android:textStyle="bold" /> <TextView android:id="@+id/total_dose" android:visibility="gone" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/na" android:textColor="#006600" android:textSize="@dimen/text_size_normal" android:textStyle="bold" /> </LinearLayout> 的类,其中包含3个变量。

我还有另一个班级  CStudentEmploy

其中包含一个指针向量  CAnalizeData:CStudentEmploy

我也有istream运算符:

vector<CStudentEmploy*>m_vData;

我想通过以下方式从文件填充此向量:

friend istream& operator >> (istream& str,CStudentEmploy& obj)
    {
        str >> obj.m_strName >> obj.m_strFacNum >> obj.m_iMinutes;
        return str;
    }

如果我要填充对象向量,则这种方法有效。

我得到的错误是:

错误C2679二进制'>>':未找到采用'_Ty'类型的右侧操作数的运算符(或没有可接受的转换)

我了解迭代器存在问题,但无法真正解决。谢谢。

这是完整的代码:

CAnalizeData(const string &strFileName) {
        ifstream ifile(strFileName.data());
        copy(istream_iterator<CStudentEmploy*>(ifile), istream_iterator<CStudentEmploy*>(), back_inserter(m_vData));
    }

1 个答案:

答案 0 :(得分:0)

也许带有std::transform的东西:

CAnalizeData(const string &strFileName) {
    ifstream ifile(strFileName.data());
    transform(istream_iterator<CStudentEmploy>(ifile),
      istream_iterator<CStudentEmploy>(), back_inserter(m_vData),
      [](const CStudentEmploy &e) { return new CStudentEmploy(e); });
}

在这里使用new,因为我假设该对象将在堆栈​​上创建。