我不能找到一種方法,使編譯下面簡單的STL代碼在VS 2012:VS 2012錯誤C2679:二進制「=」:沒有操作員發現正在做的std ::地圖的副本
#include <algorithm>
#include <map>
#include <string>
...
class SomeClass;
SomeClass a;
std::map<std::string, SomeClass> x;
x["a"] = a;
std::map<std::string, SomeClass> y;
std::copy(x.begin(), x.end(), std::inserter(y, y.end()));
我總是得到VS編譯器錯誤:
xutility(2089): error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::pair<_Ty1,_Ty2>' (or there is no acceptable conversion)
UPDATE
我真的很抱歉!我設法隔離有問題的代碼,就是這樣。它基本上是智能指針的類型逆變問題shared_ptr
,因爲它無法複製anAImplPtr = anAPtr
即使anAPtr
實際上指向一個AImpl
實例的包裝:
#include <algorithm>
#include <map>
#include <string>
#include <iterator>
#include <boost/thread.hpp>
class A
{
public:
virtual ~A() { }
};
class AImpl : public A {
public:
virtual ~AImpl() { }
};
typedef boost::shared_ptr<A> APtr;
typedef boost::shared_ptr<AImpl> AImplPtr;
static void test()
{
std::map<std::string, APtr> x;
APtr a(new AImpl());
x["a"] = a;
std::map<std::string, AImplPtr> y;
std::copy(x.begin(), x.end(), std::inserter(y, y.end()));
}
它適用於MSVC2015,如果包含'#include',會發生什麼? –
根據[這個問題的答案](http://stackoverflow.com/questions/2748295/how-can-i-copy-one-map-into-another-using-stdcopy)應該工作。 – Borgleader
對不起,這個例子的作品,但似乎問題是在實際SomeClass –