C++11 travis仅构建失败:使用删除的函数‘;标准::唯一性\u ptr<_Tp,_Dp>;::唯一的ptr(常数标准::唯一的ptr<;\u Tp,\u Dp>;)

C++11 travis仅构建失败:使用删除的函数‘;标准::唯一性\u ptr<_Tp,_Dp>;::唯一的ptr(常数标准::唯一的ptr<;\u Tp,\u Dp>;),c++11,unique-ptr,C++11,Unique Ptr,代码在本地编译时没有问题(ubuntu 19.04,gcc-8.3.0),但在travis构建期间失败(ubuntu 18,gcc-8.3.0) 错误 In file included from /usr/include/c++/7/memory:64:0, from ./src/Game.hpp:5, from ./src/main.cpp:3: /usr/include/c++/7/bits/stl_construct.h:

代码在本地编译时没有问题(ubuntu 19.04,gcc-8.3.0),但在travis构建期间失败(ubuntu 18,gcc-8.3.0)

错误

In file included from /usr/include/c++/7/memory:64:0,
                 from ./src/Game.hpp:5,
                 from ./src/main.cpp:3:
/usr/include/c++/7/bits/stl_construct.h: In instantiation of ‘void std::_Construct(_T1*, _Args&& ...) [with _T1 = std::unique_ptr<Cell>; _Args = {const std::unique_ptr<Cell, std::default_delete<Cell> >&}]’:
/usr/include/c++/7/bits/stl_uninitialized.h:83:18:   required from ‘static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<Cell>*, std::vector<std::unique_ptr<Cell> > >; _ForwardIterator = std::unique_ptr<Cell>*; bool _TrivialValueTypes = false]’
/usr/include/c++/7/bits/stl_uninitialized.h:134:15:   required from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<Cell>*, std::vector<std::unique_ptr<Cell> > >; _ForwardIterator = std::unique_ptr<Cell>*]’
/usr/include/c++/7/bits/stl_uninitialized.h:289:37:   required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<Cell>*, std::vector<std::unique_ptr<Cell> > >; _ForwardIterator = std::unique_ptr<Cell>*; _Tp = std::unique_ptr<Cell>]’
/usr/include/c++/7/bits/stl_vector.h:331:31:   required from ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::unique_ptr<Cell>; _Alloc = std::allocator<std::unique_ptr<Cell> >]’
/usr/include/c++/7/bits/stl_construct.h:75:7:   required from ‘void std::_Construct(_T1*, _Args&& ...) [with _T1 = std::vector<std::unique_ptr<Cell> >; _Args = {const std::vector<std::unique_ptr<Cell, std::default_delete<Cell> >, std::allocator<std::unique_ptr<Cell, std::default_delete<Cell> > > >&}]’
/usr/include/c++/7/bits/stl_uninitialized.h:83:18:   required from ‘static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::vector<std::unique_ptr<Cell> >*, std::vector<std::vector<std::unique_ptr<Cell> > > >; _ForwardIterator = std::vector<std::unique_ptr<Cell> >*; bool _TrivialValueTypes = false]’
/usr/include/c++/7/bits/stl_uninitialized.h:134:15:   required from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::vector<std::unique_ptr<Cell> >*, std::vector<std::vector<std::unique_ptr<Cell> > > >; _ForwardIterator = std::vector<std::unique_ptr<Cell> >*]’
/usr/include/c++/7/bits/stl_uninitialized.h:289:37:   required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::vector<std::unique_ptr<Cell> >*, std::vector<std::vector<std::unique_ptr<Cell> > > >; _ForwardIterator = std::vector<std::unique_ptr<Cell> >*; _Tp = std::vector<std::unique_ptr<Cell> >]’
/usr/include/c++/7/bits/stl_vector.h:331:31:   required from ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::vector<std::unique_ptr<Cell> >; _Alloc = std::allocator<std::vector<std::unique_ptr<Cell> > >]’
./src/Systems/Physics/Grid.hpp:9:7:   required from here
/usr/include/c++/7/bits/stl_construct.h:75:7: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Cell; _Dp = std::default_delete<Cell>]’
     { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/7/memory:80:0,
                 from ./src/Game.hpp:5,
                 from ./src/main.cpp:3:
/usr/include/c++/7/bits/unique_ptr.h:388:7: note: declared here
       unique_ptr(const unique_ptr&) = delete;
网格仅由
物理系统使用

PhysicsSystem::PhysicsSystem(float gridLength, float cellHalfWidth) : grid(gridLength, cellHalfWidth)
{
    this->primaryBitset = ComponentType::Physics | ComponentType::Transform;
}
物理系统只是在这里初始化的

Game::Game(int width, int height) :
    width(width), height(height) , 
    physicsSystem(70.f, 5.f)
{
   // stuff
}

您正在尝试复制构造唯一指针的向量。错误来自
Grid.hpp
。那么,显示该文件。即:显示
网格
的声明。您还应该显示
网格
实例的构造和复制位置。无论如何,很明显Max是对的。您的类需要一个移动构造函数,因为根据定义,
unique\ptr
是不可复制的。@下划线\d这很有意义,我已经用请求的信息更新了问题的详细信息。奇怪的是,我没有在本地看到这个问题,代码编译正常。
PhysicsSystem::PhysicsSystem(float gridLength, float cellHalfWidth) : grid(gridLength, cellHalfWidth)
{
    this->primaryBitset = ComponentType::Physics | ComponentType::Transform;
}
Game::Game(int width, int height) :
    width(width), height(height) , 
    physicsSystem(70.f, 5.f)
{
   // stuff
}