怎么在嵌套类的外围类访问嵌套类的私有成员
如何在嵌套类的外围类访问嵌套类的私有成员?本帖最后由 zyjisdog 于 2013-12-21 13:53:54 编辑这里有个Lis
如何在嵌套类的外围类访问嵌套类的私有成员?
本帖最后由 zyjisdog 于 2013-12-21 13:53:54 编辑 这里有个List类嵌套了一个友元类Iterator:
class List
{
private:
struct Node
{
....
};
......
public:
friend class Iterator;
class Iterator
{
private:
List plist;
typename List::Node *p;
......
};
};
怎么在List类里访问Iterator的plist和p呢?
我是在Iterator的public里添加两个方法get_plist()和get_p(),然后在List里用
Iterator& begin() { Iterator::get_p() = Iterator::get_plist()->List::head; return Iterator; }这种方法来获得plist和p。
但是会出错:error C2352: “List::Iterator::get_p”: 非静态成员函数的非法调用
求教各位大大,谢谢~
[解决办法]大概这么处理,就可以了,其实 Node*,就是Iterrator
class List
{
public:
//typedef int elemtype;
private:
struct Node
{ elemtype elem;
....
};
......
public:
friend class Iterator;
class Iterator
{
private:
typename List::Node *p;
Iteratror(const Node *node = NULL)p(node){}
public:
//不带空头结点
elemtype& operator*(){return p->elem;}
const elemtype& operator*()const{return p->elem;}
Iteratror& operator=(const Iteratror&){....return *this;}
......
};
Node *head;
Iteratror begin(){return Iteratror (head);}
Iteratror end(){return Iteratror ();}
};
[解决办法]typename应改为 typedef 吧
改成这样是对的,你自己比着葫芦画个瞟吧
class Listt
{
private:
struct Node
{
};
public:
void lgete(){
int c=Iterator::get();
}
class Iterator{
friend void Listt::lgete();
private:
Listt* plist;
typedef Listt::Node *p;
private:
int a;
static int get(){return 1;}
};
};