создание автоматического ptr для класса друзей


Это пример кода моего проекта.

Я должен сделать std:: auto_ptr для класса friend, чтобы он мог получить доступ к закрытым членам.

  #include "stdafx.h"
  #include <map>
  #include <iostream>

  //sample namespace
  namespace test
  {
    //class A
    class A
    {
    public:
      //making class B to friend , so that it can access private members
      friend class B;

    private:
    int i;

     //constructor - private
     A(int in)
      {
        i = in;
      }
      // private destructor;
      ~A()
      {
        std::cout<<"n Ending";
        getchar();
     }
   };

    //map to store A pointer
    typedef std::map<int, std::auto_ptr<A>> MAP;

   //class B, friend of A
  class B
  {
  private:
    MAP Map;
  public:
  //making auto_ptr to a friend class , so that it can call the destruct all the A       pointer. 
  friend class std::auto_ptr; //Getting error like" error C2990: 'std::auto_ptr' 
//: non-class template has already been declared as a class template
  B()
  {
    std::auto_ptr<A> a(new A(1));
    std::auto_ptr<A> b(new A(2));
    std::auto_ptr<A> c(new A(3));
    Map[0] = a;
    Map[1] = b;
    Map[2] = c;
  }
  ~B()
  {

  }
};
}


int _tmain(int argc, _TCHAR* argv[])
{
  using namespace test;
  B ab;
return 0;
}
Но когда я попытался сделать это с другом, я получаю ошибку... пожалуйста помочь....
1 2

1 ответ:

Поскольку auto_ptr является шаблонным классом, вам понадобится что-то вроде:

friend std::auto_ptr<B>;