C++ 에서 friend 선언의 모순??
글쓴이: login321 / 작성시간: 화, 2009/08/11 - 5:46오후
.
.
.
class My; class Your { public: void getMoney(My::Won_TYPE amount, My& my); // error : My::Won_TYPE ??? }; class My { public: friend void Your::getMoney(My::Won_TYPE amount, My& my); typedef int Won_TYPE; private: Won_TYPE m_money; }; void Your::getMoney(My::Won_TYPE amount, My& my) { my.m_money -= amount; }
class My 는 class Your을 friend로 선언합니다.
나의 private member인 m_money을 마음껏 getMoney할수 있게요.
friend를 선언할때는 클래스의 선언 및 정의의 순서를 잘 배치해야한다고 배웠는데
문제는 money의 타입을 typedef를 써서 Won_TYPE으로 하면
클래스 선언 및 클래스 정의의 배치 순서를 정하는데 모순이 생기는거 같습니다.
1. class My가 friend를 선언하려면 class Your가 정의되어있어야한다.
2. class Your가 정의되려면 class My가 선언되어야하며(Your의 정의에서 MY&를 사용함)
그뿐만 아니라 Won_TYPE을 알기위해서는 class My가 정의되어야한다.
3. class Your보다 class My가 먼저 정의되려면 friend선언이 불가능하다.
이런 모순이 실재 존재하는건지 아님 제가 어디서 잘못 생각하는건지 지적 좀 부탁드립니다.
(클래스 전체를 friend로 하면 안되고 함수만 friend로 선언하려고합니다. 좋은 설계법은 아닌거 같지만 c++를 이제막 입문하는 입장이라 문법적으로 가능한 방법이 있는건지 궁금합니다.)
Forums:
모순이 있는
모순이 있는 코드인지, 단순한 문법 문제인지 헷갈리네요 :)
에러는 Won_TYPE의 선언위치때문인데 Won_TYPE을 My 안에서 꼭! 가지고 있어야만 하고
코드 순서를 꼭! 위와 같이 해야만 한다면,
Won_TYPE부분을 들어내서 traits로 상속받아 사용하는건 어떨까 싶네요
댓글 달기