class A
{
public:
  A();
  class B
  {
    public:
    B();
    DoB();
  };
  DoA()
  {...}
};A::B::DoB()
{
   ...
   DoA();  //????????????????应该怎么调用阿
}

解决方案 »

  1.   

    一种办法: 让DoA成为静态函数,然后使用 A::DoA()来调用
    另一种办法: 在DoB()中使用A类对象的指针,然后调用 objA->DoA();
      

  2.   

    一、在嵌套类中保存一个外层类对象的指针。
    二、生命嵌套类为外层类的友员。
    三、声明一个嵌套类变量。
    四、初始化这个变量
    class A
    {
    public:
      A():embedded(this)
      {  }
      class B
      {
        public:
        B(A pOuter)
        {
          outer=pOuter;
        }
        DoB();
        A* outer;  };
      DoA()
      {...}
     
      friend B;//A 可以访问B
    };A::B::DoB()
    {
       outer->DoA();
    }
      

  3.   

    friend B;//A 可以访问B????
    是b可以访问A
      

  4.   

    如果是访问外围类的public成员,
    你可以让嵌套类拥有一个外围类的指针,
    并通过这个指针来调用如果访问私有成员,需要声明为friend同意 ruihuahan(飞不起来的笨鸟) 的做法
      

  5.   

    ruihuahan(飞不起来的笨鸟),的程序解释有误,
    class A
    {
    friend B ; 
    }
    声明B是A的友元,是B可以访问A的所有成员,而不是A可以访问B;
      

  6.   

    class A
    {
    public:
      A():embedded(this)
      {  }
      class B
      {
        public:
        B()
        DoB();
      };
      DoA()
      {...}
     
      friend B:DoB();
    };A::B::DoB()
    {
       A:DoA();
    }
      

  7.   

    嵌套类不能直接访问其外围类的非静态成员。任何对外围类的非静态成员的访问都要求通过外围类的指针,引用或对象来完成。
    这个是《C++ Primer 中文版》555页上的话,还有例子
    去看看吧
      

  8.   

    class A
    {
    public:
      A():embedded(this)
      {  }
      class B
      {
        public:
        B()
        DoB(A*);
      };
      DoA()
      {...}
     
      friend B:DoB(A*);
    };A::B::DoB(A* a)
    {
       a->DoA();
    }