内部类 MyIterator 需要访问RBTree<T,R> tree
外部类 Map 中的私有字段:
template<class T,class R>
class Map
{
friend class MyIterator;
public:
Map();
~Map();
R& operator[](T index)
{
return tree.searchOperator(index);
}
class MyIterator : public iterator<bidirectional_iterator_tag, RBTNode<T, R>>
{
public:
MyIterator(RBTNode<T, R> it)
{
second = it.Element.second;
first = it.Element.first;
}
MyIterator()
{
}
MyIterator& operator=(const MyIterator& it)
{
}
MyIterator& operator*()
{
//пустует.
}
MyIterator(const MyIterator& source)
{
first = source.first;
second = source.second;
}
MyIterator operator++(int)
{//Post ++
RBTNode<T, R>* pt = tree.search(first);
pt =tree.Inc(pt);
//MyIterator tmp = *this;
*this.first=pt.Element.first;
*this.second = pt.Element->second;
return *this;
}
MyIterator operator->()
{
//
return (**this);
}
public:
T first;
R second;
};
MyIterator begin()
{
RBTNode<T, R> pt = tree.f_begin();
MyIterator temp(pt);
return temp;
}
private:
RBTree<T,R> tree;//хочу сделать доступным в MyIterator
//RBTNode<T, R> tempnode;
};
template <class T,class R>
Map<T, R>::Map() {
}
template <class T, class R>
Map<T,R>::~Map()
{
}
谁以及如何声明一个朋友,以便这个重载可以访问树实例?
MyIterator operator++(int)
{//Post ++
RBTNode<T, R>* pt = tree.search(first);//Ошибка tree идентификатор не найден
pt =tree.Inc(pt);
//MyIterator tmp = *this;
*this.first=pt.Element.first;
*this.second = pt.Element->second;
return *this;
}
嵌套类声明与非嵌套类声明没有什么不同,除了命名方案和嵌套类对封闭类的所有成员具有访问权限。在所有其他方面,这些都是完全独立的、独立的类。
您的类(模板)
Map::MyIterator
是一个完全独立的类。该字段tree
是该类的成员,只能通过该类的特定实例Map
访问该字段。您在方法中没有任何类的实例。因此,也没有。tree
Map
Map::MyIterator::operator ++
Map
tree
如果您希望它
Map::MyIterator
绑定到类的特定实例Map
并从那里获取成员tree
,那么您将必须自己手动组织此连接。Map::MyIterator
除了授予上述访问权限之外,它在内部声明的事实对Map
您没有任何帮助。