为什么我的班级成员不存在?

时间:2018-05-12 02:51:27

标签: c++

我写了一个地图类:

typedef int (& func(const std::string &));

template <class t_child>
class map final
{
    std::vector<t_child> m_table;
    const func m_hasher;
public:
    explicit map(const func hasher) : m_hasher(hasher) {}
    map(const map &copy) = delete;
    ~map();
    map &operator=(const map&) = delete;
    //***
};

但我收到错误:

map.hpp:15: error: class ‘map<t_child>’ does not have any field named ‘m_hasher’
     explicit map(const func hasher) : m_hasher(hasher) {}
                                       ^~~~~~~~

出了什么问题?为什么不存在?

2 个答案:

答案 0 :(得分:2)

我意识到这不是一个很好的答案,但如果这就是你想要的,我可以告诉你一个快速的方法让它发挥作用。

我经常使用<functional>这样的事情,因为它通常比函数指针语法更容易记住。我有以下编译。

#include <string>
#include <functional>

using func = std::function<int(std::string&)>;

template <class t_child>
class map final
{
    std::vector<t_child> m_table;
    const func m_hasher;
public:
    explicit map(const func hasher) : m_hasher(hasher) {}
    map(const map &copy) = delete;
    ~map();
    map &operator=(const map&) = delete;
    //***                                                                                                                                                                                          
};

int main() {
  return 0;
}

答案 1 :(得分:1)

这不一定与您的问题有关,但您也可以使用标准unordered_map类,并在需要时继承它。