在内部类中使用私有变量

时间:2018-06-21 18:50:54

标签: c++ inner-classes

我有一个容器类和一个指针类。容器类有一个私有变量(myTreeSize),指针类也需要它。我尝试使用参考或朋友,但是它不起作用。也许有人有主意?

template <typename Key>
class myContainer{
class myPointer;
using littlePoint = myPointer;
private:
  struct node{ 
    //....
  };
  struct mylist{  
    //....
  };

  mylist* tree{nullptr};
  size_type myTreeSize{0};

public:
  littlePoint find(int key) {
   mylist *list_pos{find_list(key)}; //return list-position
    node *node_pos {find_node(key)}; //return node-position
   if (list_pos && node_pos) return littlePoint{list_pos, node_pos};
   return end();
}

//.....methods
};

template <typename Key>
class myContainer<Key>::myPointer{
  mylist *list_pos;
  node *node_pos;

  myContainer& parent; //<--- no private variables
  friend class myContainer; //<-- no effect

  explicit myPointer(mylist *list_pos=nullptr, node *node_pos = nullptr):
     list_pos{list_pos}, node_pos{node_pos} {
      //...
}
}

2 个答案:

答案 0 :(得分:1)

myContainer& parent必须被初始化。引用不能未初始化。如果我解决了这个问题,那么您的代码就会编译,并且不需要friend声明作为外部类的inner class has full access

#include <iostream>
#include <string>

using namespace std;

template <typename Key>
class myContainer {
    class myPointer;
private:
    struct node {
        //....
    };
    struct mylist {
        //....
    };

    mylist* tree{ nullptr };
    int myTreeSize{ 0 };

public:
};

template <typename Key>
class myContainer<Key>::myPointer {
    mylist *list_pos;
    node *node_pos;

    myContainer& parent;

    explicit myPointer(myContainer& parent, mylist *list_pos = nullptr, node *node_pos = nullptr) :
        parent(parent), list_pos{ list_pos }, node_pos{ node_pos } {
        parent.myTreeSize; // no problem!
    }
};

int main()
{
    myContainer<int> c;
}

DEMO

答案 1 :(得分:0)

外部类中没有显示myPointer。声明嵌套类不会自动创建该类的任何实例。同样,“内部”类也没有“外部”实例。

一个简单的示例,它实际实例化内部类并将引用传递给它的父类:

template <typename T>
class A
{
    class B;
    B b_;

public:
    A() : b_(*this) {}
};

template <typename T>
class A<T>::B
{
    A & a_;

public:
    B(A & a) : a_(a) {}
};