>백엔드 개발 >C++ >C의 중첩 클래스를 해당 클래스 외부에서 사용하기 위해 전달 선언할 수 있습니까?

C의 중첩 클래스를 해당 클래스 외부에서 사용하기 위해 전달 선언할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-01 15:57:10630검색

Can Nested Classes in C   Be Forward Declared for Use Outside Their Enclosing Class?

중첩 클래스 전방 선언: 불가능한 작업

C에서 내부 클래스는 코드를 구성하는 편리한 방법이 될 수 있습니다. 그러나 바깥쪽 클래스 정의 외부에서 참조로 내부 클래스 개체를 전달하려고 하면 컴파일 오류가 발생할 수 있습니다. 이는 호출 함수에서 내부 클래스를 사용하기 전에 컴파일러에서 내부 클래스를 완전히 정의하거나 선언해야 하기 때문입니다.

다음 코드를 고려하세요.

class Container {
public:
    class Iterator {
        ...
    };

    ...
};

Iterator를 전달하려는 경우 Container 클래스 범위 밖의 함수에서 객체를 참조로 사용하는 경우 직관적으로 Iterator 클래스 선언을 시도할 수 있습니다.

class Container::Iterator;

class Foo {
    void Read(Container::Iterator& it);
};

그러나 이는 알 수 없는 유형 Iterator로 인해 컴파일 오류로 인해 접근 방식이 실패합니다.

전방 선언 제한

C에서 전방 선언은 중첩된 클래스가 아닌 클래스 자체를 선언하는 데만 사용할 수 있습니다. 회원. 이러한 제한으로 인해 내부 클래스의 전방 선언이 방지됩니다.

솔루션

이 문제를 해결하려면 대체 전략을 고려하십시오.

  • 클래스를 중첩되지 않게 만듭니다. 앞으로 선언할 수 있도록 Iterator 클래스를 컨테이너 클래스 외부로 이동합니다. 독립적으로.
  • 클래스 선언 재정렬: Foo 클래스의 함수 시그니처에서 사용하기 전에 Iterator 클래스를 완전히 정의합니다.
  • 공통 기본 클래스 사용: Iterator 클래스와 Foo 클래스의 함수가 모두 상속할 수 있는 별도의 기본 클래스를 만듭니다. 이를 통해 공통 기본 클래스를 앞으로 선언하고 여기서 파생된 객체를 참조로 전달할 수 있습니다.

위 내용은 C의 중첩 클래스를 해당 클래스 외부에서 사용하기 위해 전달 선언할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.