【发布时间】:2016-04-07 11:24:48
【问题描述】:
我正在 Visual Studio 2013 中实现禁忌搜索算法。
我想要一个生成邻域的函数
(对于Neighbour 类的对象,它是std::unique_ptr 的std::array)。
很遗憾,我无法移动唯一指针的 std::array(我可以移动 std::unique_ptr<Neighbour>)。
我检查了std::unique_ptr<Neighbour> 必须是可移动的 - 确实如此。
#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);
}
在 Coliru 上它正在工作:http://coliru.stacked-crooked.com/a/6c52a6a7a148350a 我想在 Visual Studio 2013 中实现 C++11 有问题。
你知道我该如何解决吗?
错误是:
1>------Build started : Project : Project5, Configuration : Debug Win32------
1> Source.cpp
1>c:\users\radek\documents\visual studio 2013\projects\project5\project5\source.cpp(29) : error C2280 : 'std::unique_ptr<Neighbour,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function
1> with
1>[
1> _Ty = Neighbour
1>]
1> c:\program files(x86)\microsoft visual studio 12.0\vc\include\memory(1487) : see declaration of 'std::unique_ptr<Neighbour,std::default_delete<_Ty>>::operator ='
1> with
1>[
1> _Ty = Neighbour
1>]
1> This diagnostic occurred in the compiler generated function 'std::array<std::unique_ptr<Neighbour,std::default_delete<_Ty>>,12> &std::array<std::unique_ptr<_Ty,std::default_delete<_Ty>>,12>::operator =(const std::array<std::unique_ptr<_Ty,std::default_delete<_Ty>>,12> &)'
1> with
1>[
1> _Ty = Neighbour
1>]
== == == == == Build: 0 succeeded, 1 failed, 0 up - to - date, 0 skipped == == == == ==
【问题讨论】:
标签: arrays c++11 visual-studio-2013 move-semantics