我正在Visual Studio 2013中实现禁忌搜索算法。
我想有一个生成邻域的功能
(对于std::array
类的对象,它是std::unique_ptr
的{{1}}。
不幸的是,我无法移动Neighbour
个唯一指针(我可以移动std::array
)。
我已经检查过std::unique_ptr<Neighbour>
必须是可移动的 - 所以它是。
std::unique_ptr<Neighbour>
在Coliru上,它正在运作:http://coliru.stacked-crooked.com/a/6c52a6a7a148350a 我想在Visual Studio 2013中实现C ++ 11有些问题。
你知道我该怎么办呢?
错误是:
#include <iostream>
#include <memory>
#include <array>
class Neighbour {
public:
virtual ~Neighbour(){};
};
class Neighbourhood
{
public:
using Neighbours = std::array<std::unique_ptr<Neighbour>, 12>;
protected:
Neighbours neighbourhood;
unsigned size;
};
int main()
{
Neighbourhood::Neighbours n1;
Neighbourhood::Neighbours n2;
n2 = std::move(n1);
}
答案 0 :(得分:1)
VS2013不会自动生成移动构造函数。只需为您的类实现移动构造函数,它将按预期编译和运行。