我有一个容器类和一个指针类。容器类有一个私有变量(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} {
//...
}
}
答案 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;
}
答案 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) {}
};