Gcc NDK C++;11,调用已删除的构造函数错误
我有一个名为RenderCommand的类:Gcc NDK C++;11,调用已删除的构造函数错误,gcc,c++11,android-ndk,clang,Gcc,C++11,Android Ndk,Clang,我有一个名为RenderCommand的类: class RenderCommand { public: RenderCommandType commandType; RenderCommand() : commandType(RenderCommandTypeNone) {}; virtual ~RenderCommand() {}; }; 然后,我有一个包含这些RenderCommands的队列,其中存储了对它们唯一的\u ptr: typedef std::de
class RenderCommand
{
public:
RenderCommandType commandType;
RenderCommand() : commandType(RenderCommandTypeNone) {};
virtual ~RenderCommand() {};
};
然后,我有一个包含这些RenderCommands的队列,其中存储了对它们唯一的\u ptr:
typedef std::deque<std::unique_ptr<RenderCommand>> RenderQueue;
EDIT2:Ok这似乎是一个std::deque问题,将RenderQueue更改为:
typedef std::vector<std::unique_ptr<RenderCommand>> RenderQueue;
typedef std::vector RenderQueue;
工作。另外,删除对我自己类的引用并仅使用int仍然不起作用(除非像上面那样,我将deque替换为vector):
std::vector tempQueue;
tempQueue.resize(4);
:-/我把你的例子简化为
#include <deque>
#include <vector>
struct A {
A(const A&) = delete;
};
void f()
{
std::vector<std::deque<A> > q;
q.resize(4);
}
将deque
替换为vector
或list
不会显示此行为
因此,这似乎是从g++4.6到4.7的回归,或者是对以前错误的修正。无论如何,我用g++提交了一份bug报告,请参见让我用心灵感应猜测:RenderCommandType是否已删除、无法访问或模棱两可的移动构造函数,或者不可复制?请将RenderCommandType定义添加到您的问题中。很抱歉造成混淆,RenderCommandType只是一个枚举,将其添加到原始问题中。也许这个答案有帮助,谢谢。我以前看到过,但认为这并不完全相关,因为他们试图使用TBB,而我尝试使用标准容器。这是否意味着NDK中的std::deque还不支持std::move?感谢您的测试!我还向Android提交了一份bug报告,但(可能是错误的):好吧,让我们看看他们从中得到了什么。他们要么承认并纠正它,要么能够解释为什么这是正确的行为。
required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = std::_Deque_iterator<std::unique_ptr<RenderCommand>, const std::unique_ptr<RenderCommand>&, const std::unique_ptr<RenderCommand>*>; _ForwardIterator = std::_Deque_iterator<std::unique_ptr<RenderCommand>, std::unique_ptr<RenderCommand>&, std::unique_ptr<RenderCommand>*>; _Tp = std::unique_ptr<RenderCommand>]'
enum RenderCommandType
{
RenderCommandTypeNone = 0,
RenderCommandTypeBeginRepeat,
RenderCommandTypeEndRepeat,
RenderCommandTypeBeginScene,
RenderCommandTypeEndScene,
//etc
};
typedef std::vector<std::unique_ptr<RenderCommand>> RenderQueue;
std::vector<std::deque<std::unique_ptr<int>>> tempQueue;
tempQueue.resize(4);
#include <deque>
#include <vector>
struct A {
A(const A&) = delete;
};
void f()
{
std::vector<std::deque<A> > q;
q.resize(4);
}
error: use of deleted function ‘A::A(const A&)’