|
class X;
class Y
{
private:
int num;
public:
Y()
{
num = 2;
}
void add(X& x);
};
class X
{
private:
int num;
public:
X()
{
num = 1;
}
friend void Y::add(X&);
};
void Y::add(X& x)
{
num += x.num;
}
클래스 프렌드 함수를 쓰실때는 컴파일러가 먼저 선언된 내용을 인식할 수 있도록
해주는 것이 중요합니다.
위 경우는
Y 클래스 내의 add(X& x)
함수가 X 클래스의 본체를 컴파일 단계에서 알수가 없으므로 프로토타입선언만 하고
void Y::add(X& x)
구현은 X 클래스 밑에 해주어야 합니다.
프렌드 함수를 쓰실때는 1 파싱 컴파일러 처럼 서로의 관계를 생각해서 처리해야 합니다.
김상면 님이 쓰신 글 :
: 프로그램에서 특정 클래스의 멤버 함수를 friend로 선언 할려하는데 에러가 납니다. 어데서 잘못 되었지요?
:
: #include <iostream>
: #include <string.h>
: #include <stdlib.h>
:
: using namespace std;
:
: class Y;
:
: class X
: {private:
: int num;
: public:
: X()
: { num = 1;
: }
: friend void Y::add(X&);
: };
:
: class Y
: {private:
: int num;
: public:
: Y()
: { num = 2;
: }
: void add(X& x)
: { num += x.num;
: }
: };
:
: int main()
: { X x;
: Y y;
:
: y.add(x);
:
: return 0;
: }
:
:
: 그럼
|