У меня есть класс, содержащий внутренний класс, который выглядит примерно так:
class Foo
{
class Bar
{
public:
void update(const Foo& f)
{
//Updates using public getters of Foo
}
};
public:
void doStuff() const
{
b_.update(*this);
}
private:
Bar b_;
};
Строка b_.update(*this)
в настоящее время выдает ошибку cannot convert 'this' pointer from 'const Foo::Bar' to 'Foo::Bar &'
Почему? Параметр метода update
имеет тип const Foo&
, что означает, что он не может изменить объект Foo
, если захочет. Разве это не должно удовлетворять методу const doStuff
?
Я уже час пытаюсь поискать в гугле кого-то, у кого такая же проблема, но не могу правильно сформулировать вопрос, чтобы найти похожий вопрос.
Возможно ли то, что я пытаюсь сделать, или мне нужно изменить свой дизайн?
У Clang большое сообщение об ошибке.
Похоже, метод
doStuff
не должен быть помечен какconst
.Обратите внимание, что в С++ нет понятия "внутренний класс". В Java есть штука с таким названием, а в C++ нет ничего, что делало бы то же самое. Обычно
Bar
упоминается как вложенный класс.