友元成員函數無法訪問類的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;
}
2016-12-03
至于原因應該和編譯器以及C++標準有關(我的開發環境是 ubuntu 15.10 + gcc,?-std 設置為 c++11
),總之,良好的編碼習慣可以避免很多莫名其妙的問題。
2016-12-03
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;
}
```
2016-12-03
呃呃呃 我沒懂你的意思耶,printMember(Coordinate &coor)函數是類Circle中的啊,為啥要在類外定義,我在Circle類的h文件中添加了class Coordinate這一類的聲明啊,而且還引用了Coordinate類的頭文件噠
2016-12-03
要在在Circle類外定義printMember(Coordinate &coor)函數,因為在Circle類內Coordinate類還未定義。