WeiHandsome 2023-07-07 18:30 采纳率: 85%
浏览 40
已结题

c++自定义数据深拷贝

报错严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动)
E0551 当前范围内无法定义 type "std::vector<_Ty, _Alloc>::iterator [其中 _Ty=Person, _Alloc=std::allocator]" 191

严重性 代码 说明 项目 文件 行 禁止显示状态
错误
C2226 语法错误: 意外的“std::vector<Person,std::allocator<_Ty>>::iterator”类型 ConsoleApplication3
//请大家帮忙看看怎么改

class Person
{
public:
    Person(string name, int age,int height);
    ~Person();
private:
    string m_Name;
    int m_Age;
    int* m_Height;//这里有一个堆区数据

    friend class MyPrint;
    friend void myCopy(const vector<int*>& vSource, vector<int*>& vTarget);
    friend class MyCopy;
};

Person::Person(string name, int age, int height)
{
    this->m_Name = name;
    this->m_Age = age;
    this->m_Height = new int(height);
}

class MyCopy
{
public:
    void operator()(const vector<Person>& vSource, vector<Person>& vTarget)
    {    
        for (vector<Person>::const_iterator its = vSource.begin(), vector<Person>::iterator itt = vTarget.begin(); its != vSource.end(); its++,itt++)
//我这里的意思是
        {
             itt = its;//its就是原容器迭代器,itt就是目标容器迭代器,让目标容器的每一个元素=原容器
//深拷贝,否则堆区数据重复释放报错
             itt->m_Height = new int (*(its->m_Height));        //its->m_Height是指针//    *(its->m_Height)就是身高的值了
        }
    }
};
  • 写回答

1条回答 默认 最新

  • 真相重于对错 2023-07-08 11:29
    关注
    
    vector<Person>::const_iterator a,vector<Person>::iterator b 
    

    这样的语句肯定是错误的,类似于

    
    int a,char b 
    你正确的方案,是给Persion加上copy构造,和operator= ,然后直接vTarget.insert(vTarget.begin(),vSource.begin(),vSource.end());
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月8日
  • 已采纳回答 7月8日
  • 创建了问题 7月7日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?