И тут внезапно сгущаются тучи, льёт дождь, тебя обдаёт грязью проезжающий по дороге засранный жигуль, спидозный голубь срёт тебе прямо на голову, ты весь в дерьме, компилятор тебе говорит
INVALID USE OF NON-STATIC DATA MEMBER ИЛИ ПОШЁЛ НАХУЙ ЕСЛИ НЕ ПОНЯЛ
Оказывается, что C++ это такой вот прекрасный язык, в котором экземпляр вложенного класса может существовать без внешнего класса, просто вот в вакууме, беспризорник без родителей спиздил деньги в раздевалке и бродит по улице нахуй ворует кабачки:
Сделай вложенный класс private, а не public, и тогда
Это скомпилируется.компилироваться это не будет.
Экземпляр E класса B знать не знает ни про какой объемлющий класс A и что у него есть какое-то там целочисленное поле xА должен? Если он знает о его существовании, то ты где-то накосячил с проектированием и нарушаешь принципы ООП
Классы - абстракция, модель, описывающая какую-то сущность. Если в твоей абстракции модель знает о том, что она часть чего-то большего и она обязана ей быть - передавай в конструкторе ссылку на это общее. И пусть она обращается строго по указателю к своему "владельцу".
я бы хотел, чтоб знал. Вон там ява программист ответил выше, что в Яве знает.
C++ по умолчанию поля класса считается все private. А вот поля структуры - public. Там не нужно ему писать private в данном случае.
Ну ты мозг включи. Откуда компилятор может знать к каком экземпляру класса A ты хочешь обратиться.
весь пост это и есть нытьё о том, как же плохо, что он не знает, как в той же Яве
Потому что то что ты делаешь, это обьявление вложенного класа в его неймспейсе, а не экземпляр. В данном случае, тебе нужен экземпляр. Что логично, сьхерали вложенный класс должен знать, в кого он вложен?
Агрегация или композиция не подразумивает, что экземпляр будет знать, где он находится.
Передай овнера через конструктор, коль уж надо.