如何初始化队列的队列?嵌套队列结构初始化失败求助
问题分析与解决方案
核心问题点
- 数据结构误解:
profile_lru_q_t是固定长度的int数组(长度为PROFILE_NUM),并非队列,因此没有push_back方法。你试图给数组调用队列的专属方法,属于语法错误。 - 队列空访问错误:
vc_lru_queue_inst是队列类型,初始状态为空。直接通过vc_lru_queue_inst[i]访问队列的第i个元素,会因队列中无对应元素导致越界错误。
正确初始化代码
方式1:先填充队列,再逐个赋值
// 第一步:给外层队列添加PROFILE_NUM个数组元素 for (int i=0; i<PROFILE_NUM; i++) begin profile_lru_q_t temp_arr; vc_lru_queue_inst.push_back(temp_arr); end // 第二步:给队列中的每个数组赋值 for (int i=0; i<PROFILE_NUM; i++) begin for (int j=0; j<SDP_VC_NUM; j++) begin // 确保SDP_VC_NUM ≤ PROFILE_NUM,避免数组越界 vc_lru_queue_inst[i][j] = SDP_VC_NUM - 1 - j; end end
方式2:边创建数组边赋值(更高效)
for (int i=0; i<PROFILE_NUM; i++) begin profile_lru_q_t temp_arr; // 先给临时数组完成赋值 for (int j=0; j<SDP_VC_NUM; j++) begin temp_arr[j] = SDP_VC_NUM - 1 - j; end // 将赋值后的数组加入队列 vc_lru_queue_inst.push_back(temp_arr); end
注意事项
- 必须保证
SDP_VC_NUM的数值不大于PROFILE_NUM,否则会触发数组越界错误。 - 队列的
push_back方法仅适用于外层的vc_lru_queue_inst,内层的数组只能通过索引直接赋值。
内容的提问来源于stack exchange,提问作者Wuuu
相关产品推荐
相关产品推荐

