类内定义结构体的问题,求大神帮忙看下
今天在看程序,有一个类内定义了结构体,然后在实现文件里写了一句不明所以的语句。情况如下:
- C/C++ code
class CPtrList{protected: struct CNode { CNode* pNext; CNode* pPrev; void* data; };...//省略...}//在实现文件里面是这样的CPtrList::CNode*不明白在实现文件里为什么是这样的,有什么说法吗?求大神抽空回答下。
[解决办法]
CPtrList::CNode*
CPtrList::引出可见域, 使类型CNode可见
CPtrList::CNode* 则是一个类型, 就是CNode的指针。
直接用CNode* 是不行的,可见域限定了。
[解决办法]
相当于是类的嵌套
[解决办法]
前面有人解释了,我稍微添加点,C++的类里面可以嵌套结构体 构造体 枚举 类 等
C++有名称空间这么一说
其实在C++类里面添加结构体或者类等等都算是在类的名称空间里面声明的,假如在类的私有或者保护成员声明则无法在类外显示调用,但是假如是公有成员则外部可以调用并且作为普通的结构体或者类使用,但是在声明变量的时候需要遵守名称空间的规则,就是增加作用域解析符::
所以就会有CPtrList::CNode*的出现