设置开始迭代器时无效使用 non-static 数据成员

Invalid use of non-static data member when setting begin iterator

我正在写一个遵循这个的树 header:

class TreeLetters {
private:
    Letter* root;

public:
    // ...

    Letter* Root () const;

    class iterator {
    private:
        Letter* it;

    public:
        iterator ();
        iterator (Letter* letter);
        iterator (const iterator & other);

        iterator begin ();
        iterator end   ();

        // ...
    };
};

虽然很简单,但我在使用迭代器的begin()方法时出错,如下所示:

TreeLetters::iterator TreeLetters::iterator :: begin () {
    return iterator(root); // invalid use of non-static data member 'TreeLetters:root'
}

我一直在阅读一些旧问题,唯一至少解决了这个问题的解决方案是生成根 static,这造成了更大的问题,即无法拥有不止一棵树。

我尝试创建根 protected 并向迭代器的私有成员添加 friend class TreeLetters,但没有任何效果。我也在使用 C++11。

我做错了什么?

在我看来,迭代器必须拥有整棵树(它是指向树根的指针),而不是对当前字母的引用。可以参考这个question。 希望能帮到您解决问题。