2011-10-23 2 views
3

나는 제목에 목표를 설명하기 위해 최선을 다했지만, 여기에 코드입니다 :클래스 B의 인스턴스를 포함하는 구조체 A를 선언하는 방법 클래스 B는 구조체 A를 반환하는 함수가 있습니까?

struct Bar { 
    Foo one; 
    Foo two; 
} 

class Foo { 
    Bar function(); 
} 

나는이 작동하지 않습니다 알고 있지만, 어떻게 아이디어를 달성 할 것인가? 구조체를 전역으로 만들고 싶다면 main.cpp에서도 사용되기 때문입니다. 나는 이미 클래스 내부의 구조체 선언을 시도한 다음 Foo :: Bar {}와 같은 클래스 외부의 구조체를 정의하지만 작동하지 않습니다.

내가 원하는 이유는 몫과 나머지를 모두 반환하는 나누기 함수와 같이 둘 이상의 변수를 반환해야하는 함수가 있기 때문입니다. 그러나 문제는 사용자 정의 클래스 (BigInteger)의 여러 인스턴스가 반환된다는 것입니다.

답변

4

Bar에는 Foo의 인스턴스가 포함되어 있기 때문에 후자는 전의 선언에서 불완전 할 수 없습니다. 따라서 Bar을 선언하기 전에 Foo을 선언해야합니다. 그러나 Foo에는 Bar 개체를 반환하는 함수가 있으므로 Foo을 선언하기 전에 Bar을 전달해야합니다. 함수가 Bar 개체를 인스턴스화 할 필요가 있기 때문에 Foo::function의 실제 정의는 Bar의 선언 이후에 나타날 수있는

struct Bar; 

class Foo { 
    Bar function(); 
}; 

struct Bar { 
    Foo one; 
    Foo two; 
}; 

Bar Foo::function() 
{ 
    return Bar(); 
} 

참고.

+0

당신은 클래스 바를 의도하셨습니까? 구조체 바 수; 그리고 네, 이것은 모두 헤더 파일에 있습니다. 그래서 모든 구현이 끝났습니다. – Sooie

+0

@Sooie 예, 죄송합니다. 나는 그것을 고쳤다. – Praetorian

4

당신은 그냥이 같은 수준의 전달을 수행해야합니다

class Foo; 


struct Bar { 
    Foo *one; 
    Foo *two; 
}; 

class Foo { 
    struct Bar function(); 
}; 

이 실제로 따라서이 가능하고, 그것을 정의하지 않고 클래스를 선언합니다.

+0

이것은 작동하지 않습니다. 우선'foo'! ='Foo'; C++은 대소 문자를 구분합니다. 또한,'Bar'는 포인터가 아니거나 인스턴스에 대한 참조가 아닌'Foo'의 인스턴스를 포함하고 있으므로'Foo' 타입은'Bar'의 선언에서 불완전 할 수 없습니다. – Praetorian

+0

시도 할 때 오류가 나타납니다. 'one'필드에 불완전한 유형이 있습니다. 'two'필드에 불완전한 유형이 있습니다. (편집 : Praetorian이 말한 것) – Sooie

+0

아, @Praetorian, 그것을 잡아 주셔서 감사합니다. 나는 그것을 바로 잡았다. Sooie 제 조정을 참조하십시오. –