c++ - 如何修复“一些带有模板的结构的初始化程序太多”
问题描述
我有一个名为 WtHasher 的结构
template <typename V>
struct WtHasher {
Ul (*hasher(V&));
bool (*comparator(V&, V&));
};
当我尝试使用花括号风格制作此结构的对象时,出现错误
... some code ...
WtHasher<int> hasher = {
[] (int &k) {return (Ul)k;},
[] (int &a, int &b) {return a == b;}
};
... some code ...
错误:
error: too many initializers for ‘WtHasher<int>’
};
^
这是为什么?结构中有 2 个字段,大括号中有 2 个字段,所以它应该适合。
解决方案
如果你想声明指向函数的指针,Ul (*hasher)(V&);
它应该是。bool (*comparator)(V&, V&);
否则它只是一个成员函数声明(参见最令人烦恼的解析)。
推荐阅读
- amazon-web-services - AWS Cloud front over global Accelerator - 是缓存和 Lambda@edge 吗?
- python - 在列表及其子列表中查找成员
- python - 如何在python(jupyter notebook)中添加rdflib插件(rdflib.serializer.Serializer)
- node.js - 尝试“npm install”,得到 node-gyp 重建错误
- mapping - 当pda中有相同的映射功能时,如何决定选择哪一个?
- javascript - ThreeJS:在网格对象上添加两种材质
- ios - 如何更改 Hstack 上选定的单元格索引颜色
- excel - 用于在源数据不断变化的数据透视表中生成报告数据的通用宏
- javascript - Javascript-> 我正在学习 Promises,我遇到了这个问题
- mysql - 在编写查询以映射值时需要帮助