Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 复制类中定义的std::map时出错_C++_Copy_Friend - Fatal编程技术网

C++ 复制类中定义的std::map时出错

C++ 复制类中定义的std::map时出错,c++,copy,friend,C++,Copy,Friend,我有一个使用std::map作为容器的类。我想添加一个函数来复制两个对象之间的贴图。因为map被声明为类的私有成员,所以我需要一个friend函数来实现这一点。这是我的密码: class Data; void copyData(Data &, Data &); class Data { private: map<int, int> _data; public: friend void copyData(Data &, Data&am

我有一个使用
std::map
作为容器的类。我想添加一个函数来复制两个对象之间的贴图。因为map被声明为类的私有成员,所以我需要一个friend函数来实现这一点。这是我的密码:

class Data;
void copyData(Data &, Data &);

class Data
{
  private:
    map<int, int> _data;

  public:
    friend void copyData(Data &, Data&);
};

void copyData(Data &a, Data &b)
{
  std::copy(a._data.begin(), a._data.end(), b._data.begin());
}

main()
{
   // initialization here
   Data A, B;
   copyData(A, B);
}
类数据;
作废复制数据(数据和,数据和);
类数据
{
私人:
地图数据;
公众:
朋友无效复制数据(数据和,数据和);
};
作废副本数据(数据a、数据b)
{
std::copy(a._data.begin(),a._data.end(),b._data.begin());
}
main()
{
//这里初始化
数据A、B;
copyData(A、B);
}
但是在使用mingw32编译时会出现许多警告。如何正确执行此操作?

std::map::value\u类型定义为
std::pair
。这确保了
std::map::iterator
对象不能用于分配给键(或者您可以使用它来打破容器不变量)

这意味着映射迭代器不满足
OutputIterator
概念要求,并且不能将它们用作
std::copy()
函数的第三个参数。同样值得注意的是,在很多情况下,这段代码无论如何都会被破坏,比如一个映射比另一个映射有更多的关联

此外,还有一种更容易编写函数的方法:

void copyData(Data &a, Data &b)
{
  b._data = a._data;
}

你不只是使用复制构造函数有什么原因吗?而且,将b按值传递到copyData没有多大意义。而且我们不必猜测编译器给了您什么警告。提供它们。另外,你的标题写的是警告,你的帖子写的是错误。哪一个?你的地图声明没有类型!!