catlarray错误的STD ::队列

std::queue of CAtlArray error

本文关键字:队列 STD 错误 catlarray      更新时间:2023-10-16

我的队列推动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是必须具有的,则需要专门研究模板或寻求其他方法。