c++ - 设置开始迭代器时无效使用非静态数据成员

标签 c++ c++11 compiler-errors iterator inner-classes

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

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到迭代器的私有(private)成员,但没有任何效果。我也在使用 C++11。

我究竟做错了什么?

最佳答案

在我看来,迭代器必须有整个树(这是一个指向树根的指针),而不是对当前字母的引用。你可以引用这个question .
我希望这有助于解决您的问题。

关于c++ - 设置开始迭代器时无效使用非静态数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59469436/

相关文章:

c++ - libcurl 的标准字符串问题 - C++

C++ 成员函数清除矩阵

c++ - 使用 Ceres 优化多维函数

android - 目录名: command not found error when I run android project - NDK

c++ - 在另一个模板基类中实现抽象基类函数

c++ - 链接器未在目标文件中找到现有引用

c++ - 常量正确性

c++ - 在成员初始化列表中使用 std::function

c++ - 为什么这个类型转换模棱两可?

c - 为什么我在 "error: expected ‘=’ 之前得到 ‘,’ 、 ‘;’ 、 ‘asm’ 、 ‘__attribute__’ 或 ‘int’ ”?