对象没有命名类型 - C ++

时间:2016-09-29 23:08:14

标签: c++ templates generics

我正在尝试基于二叉树搜索实现 Set 。所以我从 root (指向Node的指针)开始构建这个集合,其中Node有一个值,右边和左边的子节点(也指向Node的指针)。所以这样我可以通过将root->指向创建的节点来设置根节点右侧的新节点,依此类推。看看定义:

template <class T>
class Set
{
    public:
        Set();
        ~Set();
        void push(const T&);
        bool belongs(const T&) const;
        void remove(const T&);
        const T& min() const;
        const T& max() const;
        unsigned int cardinal() const;
        void show(std::ostream&) const;

        friend ostream& operator<<(ostream& os, const Set<T> &c) {
            c.show(os);
            return os;
        }

    private:

        struct Node
        {
            Node(const T& v);
            T value;
            Node* left;
            Node* right; 
        };

        Node* root_;
        int cardinal_;

    Node & fatherOfNode(const Node & root, const T & key, const bool hook) const;

};

...

// This function is the one with errors.
template <class T>
Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const {
    // Some code
}

所以我有这个错误:

/home/jscherman/ClionProjects/algo2-t3-bts/set.hpp:247:1: error: ‘Node’ does not name a type
 Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const {
 ^

我见过很多与此错误相关的帖子,但其中大多数都是在定义之前编写函数实现引起的。如您所见, fatherOfNode 的实现低于其定义,因此它似乎不是我的情况。

关于发生了什么的任何想法?

1 个答案:

答案 0 :(得分:4)

NodeSet中的内部类,所以在此课程之外,您需要解决此问题:

Set<T>::Node 

所以你的函数定义需要是:

template <class T>
typename Set<T>::Node & Set<T>::fatherOfNode(const Set<T>::Node & root, const T & key, const bool hook) const {

Here it is, working.