#include <queue>
struct model_shell_t
{
model_shell_t() {clear();}
void clear();
void Release() {clear(); model_pool._delete(this);}
void SetArgument(byte4 _type, byte4 _arg1, byte4 _arg2)
{
switch( _type )
{
case 100:
if( tail_enable && !_arg1 )
{
tail_deque.clear();//tail_queue.c.clear(); // Error C2248 Cannot access protected member of queue
}
tail_enable = _arg1;
break;
case 101:
tail_interval = _arg1;
tail_count = _arg2;
break;
}
}
queue<model_t> tail_queue;
byte4 tail_enable;
byte4 tail_interval;
byte4 tail_count;
deque<model_t> tail_deque;
};
另一个:
for( byte4 i = 0; i < ms->tail_queue.size(); i++ )
{
//ms->tail_queue.c[i].bind_model = &bind_ms->tail_queue.c[i];
ms->tail_deque[i].bind_model = &bind_ms->tail_deque[i];
}
错误C2248:'std :: queue&lt; _Ty&gt; :: c':无法访问受保护的成员 在类'std :: queue&lt; _Ty&gt;'
中声明
当我将解决方案从VS2003升级到VS2008时,我无法使用clear()函数。 我怎么用呢? 谢谢
编辑:在Igor Tandetnik的帮助下,我已经改变了
答案 0 :(得分:0)
由于您显然需要直接访问元素,因此无论如何都要打破队列抽象。最简单的方法是直接使用std::deque
,而不使用包装器。
如果由于某种原因你坚持使用std::queue
,另一种方法是model_shell_t
私下从中派生,而不是将其作为成员。这样它就可以直接访问c
。虽然目前还不清楚为什么你想采取这样一条迂回路线来获得std::deque
成员。