c++ - 将列表指针传递给函数的问题
问题描述
在我的程序中,我有一个列表,它是一个指针list<COffenceUnit*>* m_attack = nullptr;
,我像这样初始化这个列表:m_attack = new list<COffenceUnit*>();
在构造函数中。在代码中的某个时刻,我想将此列表发送给另一个构造函数作为参考。这是接收列表的构造函数:
GameMap::GameMap(const std::list<CDefenceUnit*>* &defenseUnits, const std::list<COffenceUnit*>* &offenseUnits)
{
mGameMap = new int* [GRID_SIZE];
for (int i = 0; i < GRID_SIZE; ++i)
mGameMap[i] = new int[GRID_SIZE];
updateMap(defenseUnits, offenseUnits);
}
但是编译器会抛出一个错误,上面写着:
Error C2664 'GameMap::GameMap(const GameMap &)': cannot convert argument 1 from
'std::list<CDefenceUnit *,std::allocator<_Ty>> **' to 'const std::list<CDefenceUnit *,std::allocator<_Ty>> *&'
我无法弄清楚我在这里做错了什么。
解决方案
您尝试使用指向列表的指针 ( std::list<...>**
) 调用函数,但该函数需要指向列表的指针 ( std::list<...>*
),因此转换失败。
取消引用参数以删除一级指针。例如,如果您有GameMap(defenseUnits)
,则将其更改为GameMap(*defenseUnits)
.
此外,您几乎不应该new
使用 std 容器,因此要初始化您m_attack
的 ,建议在没有new
(即没有动态分配)的情况下进行,如下所示:
list<COffenceUnit*> m_attack;
然后你也不需要m_attack = list<COffenceUnit*>();
稍后再做,因为列表已经被列表的构造函数默认初始化。
这也可以帮助您避免多级指针,例如在std::list<...>**
.
此外,您可能想要std::vector
代替std::list
,后者很少是更好的选择。
推荐阅读
- java - Dagger multibinding java - 用于两个或多个实现
- excel - 使用 Word VBA 在表格单元格中查找粗体文本并提取其后面的文本
- php - 正确使用 Psalm 中一组类的模板注解
- r - 尝试在使用多个条件而不创建基线子样本的情况下找到平均值但不断收到此错误
- unit-testing - 如何评估更改对单行代码或变量的影响?
- javascript - JS在windows.open HTML页面中查找文本
- ruby - Ruby 小重构
- azure - 如何使用 azure 功能开始停止 azure app 服务计划
- sql - SQL Max() 对应的无空值
- biztalk - 脚本/自动化 BizTalk MSI 的创建,包括对挑选/选择项目的支持?