catlarray错误的STD ::队列
std::queue of CAtlArray error
我的队列推动catlarray,但它返回
cannot access private member declared in class 'ATL::CAtlArray<E>' with
[
E=BYTE
]
我的代码是
CAtlArray<BYTE> mybuffer; //Fulled with data somewhere
std::queue< CAtlArray<BYTE> > myqueue;
myqueue.push(mybuffer);
如评论中提到的,大多数ATL容器(至少我与之合作过的所有容器,但我无法用100%保证)不提供副本构造函数,而STL容器是非侵蚀的,请保留包含对象的副本,例如当生成push()
的模板代码时,编译器无法调用复制构造函数,您会收到错误。
如果您只需要一个列表容器,则可以使用另一个ATL容器来存储ATL数组,它不是世界上最漂亮的代码,因为ATL还使用复制构造函数并将另一个ATL容器插入ATL容器中并不直接,但这说明了如何实现所需的目标。
#include <atlcoll.h>
#include <queue>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
CAtlArray<BYTE> buffer;
buffer.Add('a');
buffer.Add('b');
buffer.Add('c');
CAtlList<CAtlArray<BYTE>> list;
list.GetAt(list.AddTail()).Copy(buffer);
CAtlArray<BYTE> queueHead;
queueHead.Copy(list.GetAt(list.GetHeadPosition()));
list.RemoveHeadNoReturn();
std::cout << queueHead.GetAt(0) << " " << queueHead.GetAt(1) << " " << queueHead.GetAt(2);
return 0;
}
如果STL是必须具有的,则需要专门研究模板或寻求其他方法。
相关文章:
- 使用 std::forward_list 返回错误的队列实现
- 如何将 STL 队列推送函数绑定到 std::函数?
- std::list 可以用于简单的无锁队列吗?
- Vulkan --- vkAcquireNextImageKHR 在使用某些队列系列时抛出 std::out_of_ra
- C++ std::队列推送弹出两个不同的对象获取第一个对象
- 在堆或堆栈上分配的 std::队列的内存
- 是否使用示波器队列:: swap违反任何规则来清空std ::队列
- 包含std ::队列的类的价值限制
- 为什么STD ::队列使用STD :: Dequeue作为基础默认容器
- 为什么使用Swap()时STD ::队列不会释放内存
- 如何读取STD ::队列与另一个线程共享
- catlarray错误的STD ::队列
- 生产者-消费者队列 - std::queue 或用户编写的链接列表
- 你能用lambda比较器交换std::队列吗
- C++11 使用 std::atomic(多写入器,单使用者)的无锁队列
- 在 Folly 的无锁 SPSC 队列中使用 std::memory_order_consume
- std::队列析构函数慢得要命,错误
- std::p riority_queue 比较和队列元素的年龄
- std::队列初始化与 NULL
- 释放存储在std::队列中的堆指针