2010-06-28 5 views
0

에 따라 달라집니다. 어떻게 처리할까요? 당신이 중첩되는 모든 포인터이기 때문에C++ 각 클래스의 내가 두 개의 클래스가 있다고 가정 해 봅시다 두 번째

+2

@bta 정답이있다 - 모든 당신이 앞으로 선언입니다 필요합니다. 그러나 이런 종류의 "상호 포용"은 항상 코드 냄새입니다. 나는 이것이 옳을 때가 결코 결코 없다는 말을하는 것이 아니라, 내 개인적인 경험에서 그러한 상황에 직면 할 때마다 나는 나의 계급 구조를 신중하게 생각하지 않았다는 것을 의미한다. 수업을 재구성하면 문제는 사라집니다. 당신이 갖고있는 것은 코딩 문제가 아니라 디자인 문제라고 생각 했습니까? – Mawg

답변

9

, 시도 :

class Two; 

class One { 
    Two *somevar = new Two; 
    // (...) 
}; 

class Two { 
    One *somevar = new One; 
    // (...) 
} 

를 클래스 Two, 당신이주는 컴파일러 충분한 정보 클래스 One 내부의 포인터를 만들 수 있도록 앞으로 선언함으로써. 포인터 만이 아닌 클래스 자체를 중첩 시키려고한다면 문제를 해결할 수있는 방법이 없습니다.

+1

+1. 또한 이런 종류의 의사 코드에서는 someVar의 초기화가 적절한 헤더를 포함하여 cpp 파일에서 발생하여 전체 클래스 정의를 사용할 수 있어야합니다 (new 연산자가 필요함). – stinky472

+0

@ stinky472- 좋은 점, 감사합니다 – bta

+0

@ stinky472, @bta,이 헤더 만 할 수 있지만 초기화를 생성자에서 수행해야합니다. 선언문 외부에서 정의됩니다. 생성자는'One '이'Two'의 정의 이후에 발생해야하기 때문에 인라인으로 표시해야합니다. –

0

나는 내가 해결책을 찾은 것 같아요 :

// class Type instead of Type 
// so: 
class Two *somevar = new class Two; 
관련 문제