Я не могу вызвать конструктор внутреннего класса с этим указателем внешнего класса - PullRequest
0 голосов
/ 01 февраля 2019

Я не знаю, почему приведенный ниже код не удалось скомпилировать с ошибкой:

"экземпляр экземпляра" cb :: iterator :: iterator "не соответствует типам аргументов списка аргументов: (int, const cb) "

Но код прекрасно компилируется, когда я раскомментирую вторую версию конструктора!почему компилятор считает *this константой?

class cb
{
public:
    class iterator
    {
    public:
        iterator(int x, cb& c):cb_(c)  { x_ = x; }
        //iterator(int x, const cb& c) :cb_(c) { x_ = x; }

    private:
            int x_;
            //cb a;
            const cb& cb_;
    };

    iterator begin() const; 
};

cb::iterator cb::begin() const
{
    return iterator(1, *this);

}

1 Ответ

0 голосов
/ 01 февраля 2019

Для class X тип указателя this равен X* const, если функция-член X объявлена ​​как const.Таким образом, параметр конструктора в этом случае также должен быть const.

Вот полное объяснение:
указатель 'this' в C ++

...