为了账号安全,请及时绑定邮箱和手机立即绑定

友元成员函数无法访问类的private数据成员,这是怎么回事?


#ifndef COORDINATE_H

#define COORDINATE_H


#include<iostream>

#include"Circle.h"

using namespace std;


class Coordinate

{

friend void Circle::printMember(Coordinate &coor);

public:

Coordinate(int x,int y)

{

m_iX = x;

m_iY = y;

cout << "Coordinate(int x,int y)" << endl;

}

~Coordinate()

{

cout << "~Coordinate" << endl;

}

private:

int m_iX;

int m_iY;

};

#endif


#ifndef CIRCLE_H

#define CIRCLE_H


#include <iostream>

#include"Coordinate.h"

using namespace std;


class Coordinate;

class Circle

{

public:

void printMember(Coordinate &coor)

{

cout << coor.m_iX << "," << coor.m_iY << endl;

}

};

#endif


#include"Coordinate.h"

#include"Circle.h"

#include<iostream>

using namespace std;


int main()

{

Coordinate coor(4,5);

Circle c;

c.printMember(coor);


system("pause");

return 0;

}


正在回答

4 回答

至于原因应该和编译器以及C++标准有关(我的开发环境是 ubuntu 15.10 + gcc, -std 设置为 c++11
),总之,良好的编码习惯可以避免很多莫名其妙的问题。

0 回复 有任何疑惑可以回复我~
#1

慕村3311326 提问者

真的是cpp的原因,不过还有一点不能乱包含头文件,我在Circle.h中包含了Coordinate.h这样不对,删掉之后就解决了,谢谢啦!
2016-12-04 回复 有任何疑惑可以回复我~

C++ 面向对象编码一般在 .h 文件中定义类,.cpp 文件中实现成员函数。楼主您的 Circle 类这样实现就没有问题:

- Circle.h

```cpp

#ifndef CIRCLE_H
#define CIRCLE_H

class Coordinate;

class Circle {
public:
   void printMember(Coordinate &coor);
};

#endif

```

- Circle.cpp

```c

#include <iostream>
#include "Circle.h"
#include "Coordinate.h"


using namespace std;
void Circle::printMember(Coordinate &coor) {
       cout << coor.m_iX << "," << coor.m_iY << endl;
}

```

0 回复 有任何疑惑可以回复我~

呃呃呃 我没懂你的意思耶,printMember(Coordinate &coor)函数是类Circle中的啊,为啥要在类外定义,我在Circle类的h文件中添加了class Coordinate这一类的声明啊,而且还引用了Coordinate类的头文件哒

0 回复 有任何疑惑可以回复我~

要在在Circle类外定义printMember(Coordinate &coor)函数,因为在Circle类内Coordinate类还未定义。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91156    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

友元成员函数无法访问类的private数据成员,这是怎么回事?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信