No se puede acceder al miembro de la clase interna con el objeto de la clase externa

#include <iostream>

class Outer
{
    int o;
public:
    void setOuter(int o)
    {
        this->o=o;
    }
    class Inner
    {
    public:
        int i;
        int retOuter(Outer *obj)
        {
            return obj->o;
        }
    };
};

int main(int argc, char **argv) {
    Outer::Inner obj;
    obj.i=20;
    std::cout<<"Inner i = "<<obj.i<<std::endl;

    Outer *obj1=new Outer;
    obj1->setOuter(40);
    std::cout<<"Outer o = "<<obj.retOuter(obj1)<<std::endl;

    obj1->Inner::i =50; //Access the inner class members by Outer class object!
}

Todo en el código anterior está bien aparte de la última línea. ¿Por qué no puedo acceder al miembro de la clase interna con un objeto de clase externa? El objeto de clase externa debe tener todo el acceso público de miembrosclass Outer ¡Y cómo es el comportamiento cuando creo un objeto de clase Interna tal como lo contiene una clase Externa!

Respuestas a la pregunta(1)

Su respuesta a la pregunta