【发布时间】:2020-03-23 16:27:44
【问题描述】:
我正在尝试在我的项目中使用 unordered_map。与我的问题相关的代码是
#include <bitset>
#include <unordered_map>
struct Node
{};
struct Node_IB
{};
struct Grid
{
std::unordered_map< std::bitset<64>, Node> grid;
};
struct Grid_IB
{
std::unordered_map< std::bitset<64>, Node_IB> grid;
};
template <class T_grid, class T_node>
void func1(T_grid &grid_ptr, T_node node_temp);
int main()
{
Grid grid_ptr1;
Grid_IB grid_ptr2;
int ilevel = 1;
if (ilevel == 1)
{
Node_IB node_temp;
func1(grid_ptr1, node_temp);
}
else
{
Node node_temp;
func1(grid_ptr2, node_temp);
}
}
template <class T_grid, class T_node>
void func1(T_grid &grid_ptr, T_node node_temp)
{
std::bitset<64> key = 0;
grid_ptr.grid.insert(make_pair(key, node_temp));
}
错误是“错误 C2664: 'std::_List_iterator>> std::_Hash,_Alloc,false>>::insert(std::_List_const_iterator>>,const std::pair &)': 无法转换参数1 从 'std::pair,Node>' 到 'std::pair &&'"
我尝试在另一个函数 (func_manager) 中调用 func1 并遇到了同样的问题。我对模板实例化感到困惑?这个程序有什么限制吗?
#include <bitset>
#include <unordered_map>
struct Node
{};
struct Node_IB
{};
struct Grid
{
std::unordered_map< std::bitset<64>, Node> grid;
};
struct Grid_IB
{
std::unordered_map< std::bitset<64>, Node_IB> grid;
};
template <class T_grid, class T_node>
void func1(T_grid &grid_ptr, T_node node_temp);
template <class T_gr>
void func_manager(T_gr &grid_ptr, int ilevel);
int main()
{
Grid_IB grid_ptr1;
Grid grid_ptr2;
int ilevel = 1;
if (ilevel == 1)
{
func_manager<Grid_IB>(grid_ptr1, ilevel);
}
else
{
func_manager<Grid>(grid_ptr2, ilevel);
}
}
template <class T_gr>
void func_manager(T_gr &grid_ptr, int ilevel)
{
if (ilevel == 1)
{
Node_IB node_temp;
func1(grid_ptr, node_temp);
}
else
{
Node node_temp;
func1(grid_ptr, node_temp);
}
}
template <class T_grid, class T_node>
void func1(T_grid &grid_ptr, T_node node_temp)
{
std::bitset<64> key = 0;
grid_ptr.grid.insert(make_pair(key, node_temp));
}
我是代码开发的新手。对于任何令人困惑的信息,我们深表歉意。
谁能帮我解决这个问题?
谢谢
【问题讨论】:
-
请提供minimal reproducible example。例如,这段代码无法编译,
grid_ptr在main中使用但尚未声明。 -
很抱歉给您带来不便。我重新编辑了代码。