【问题标题】:Error in declaring unordered_map which maps string to a template声明将字符串映射到模板的 unordered_map 时出错
【发布时间】:2017-06-06 15:27:30
【问题描述】:
template<typename T>
struct hash;

template<typename T> class WUG{
    public:
        WUG(){
            unordered_map<string,typename T,hash> vertexmap; //Problem
        }
};

我在这段代码中遇到了一些错误,这对我没有任何意义。如何正确申报?

我收到的错误消息是:
[错误] 模板参数 2 无效
[错误] 模板参数 5 无效

【问题讨论】:

  • 您可能正在使用using namespace std;。这可能会在 std::hash 和您声明的 ::hash 之间造成一些混淆。 minimal reproducible example 是有序的。此外,编译器很清楚T 命名了一个类型。这是一个模板参数。
  • 你的地图由三个参数组成,一个地图只接受两个,它就像一个键值对 - map
  • @zenwraight 这是不正确的。 std::unordered_map 可能有多达 5 个模板参数,其中 3 个提供默认值。
  • 啊,我不知道,嗯,很高兴在这里学到一些东西

标签: c++ templates data-structures compiler-errors unordered-map


【解决方案1】:

您有 using namespace std;,它从 std 命名空间导入所有名称,包括 std::hash,修复:

struct MyHash;

template <typename T>
class WUG {
public:
  WUG() {
    unordered_map<string, T, MyHash> vertexmap; //Problem
  }
};

或使用标准哈希:

template <typename T>
class WUG {
public:
  WUG() {
    unordered_map<string, T> vertexmap; //Problem
  }
};

【讨论】:

  • @BatzorigZorigoo 如果您想使用std::hash&lt;T&gt;,请不要为您的地图提供第三个模板参数。这是使用std::unordered_map 的默认哈希实现。
  • @BatzorigZorigoo std::hash 适用于std::string 以及许多其他标准类型。
  • @FrançoisAndrieux 不错!但我删除了 using namespace std;并在需要的地方添加了 std:: 。但我仍然有同样的错误
  • @BatzorigZorigoo 如果您要对问题进行更改,请编辑问题。如果这些更改会彻底改变问题,请发布另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2021-11-23
  • 1970-01-01
  • 2014-04-04
  • 2012-01-23
  • 2022-01-01
  • 2012-08-21
相关资源
最近更新 更多