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没有多大意义。而且我们不必猜测编译器给了您什么警告。提供它们。另外,你的标题写的是警告,你的帖子写的是错误。哪一个?你的地图声明没有类型!!