首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

友元类的一点有关问题

2012-11-03 
友元类的一点问题[codeC/C++][/code]//作为baseH的友元类baseS为何不能在自己的成员函数中直接使用baseH

友元类的一点问题
[code=C/C++][/code]
//作为baseH的友元类baseS为何不能在自己的成员函数中直接使用baseH的私有成员ith? 
//在IfFull函数的定义中报错 ith 为未定义
#include <iostream>
#include <vector>
#include <windows.h>
#include <mmsystem.h>

using namespace std;

class baseH
{
friend class baseS;
public:
baseH() : ith(BaseVectorH.begin()),count(BaseVectorH.size()/2)
{
BaseVectorH.push_back(1);//标记边界
for(int i = 0;i < 9;i++)
BaseVectorH.push_back(0); //初始化容器,且设定长度为9
BaseVectorH.push_back(1);//标记边界
}
private:
vector<int> BaseVectorH; //横向容器
vector<int>::iterator ith;
size_t count;
};

class baseS
{
friend class Box;
friend class Rotate;
friend class Left;
friend class Right;
friend class Down;
public:
baseS() : its(BaseVectorS.begin())
{
for(int i = 0;i < 14;i++) //初始化容器,且设定长度为14
{
baseH bs;
BaseVectorS.push_back(bs);
}
}
bool IfFull();
void DisplayRound();
//void CreateBox();
private:
vector<baseH> BaseVectorS;
vector<baseH>::iterator its;
};

bool baseS::IfFull()
{
its = BaseVectorS.end();
for(ith =its->BaseVectorH.begin();ith != its->BaseVectorH.end();ith++)
if(*ith == 0) 
return 0;
for(;its != BaseVectorS.begin();its--) //消行
its->BaseVectorH = (its-1)->BaseVectorH;
return 1;

}
//………

[解决办法]
平常类对自己的成员访问是通过this指针,如

C/C++ code
class A{    int a;public:    int get_a() { return a;/* 相当于return this.a; */ }}; 

热点排行