>  기사  >  백엔드 개발  >  GCC를 사용하여 템플릿 함수의 기본 클래스 멤버에 액세스할 수 없는 이유는 무엇입니까?

GCC를 사용하여 템플릿 함수의 기본 클래스 멤버에 액세스할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-01 15:50:02941검색

Why Can't I Access Base Class Members in a Template Function with GCC?

템플릿에서 기본 클래스 멤버 사용

제공된 코드는 GCC에서는 컴파일에 실패했지만 Visual Studio에서는 성공했습니다. bar 함수에서 기본 클래스의 foo 멤버에 액세스하려고 시도할 때 GCC는 foo가 현재 범위 내에서 선언되지 않았다는 오류에 직면합니다.

공식 C 사양에 따르면 GCC는 다음과 같은 특정 규칙을 준수합니다. 기본 클래스가 템플릿 클래스인 경우 컴파일러가 기본 클래스의 멤버를 유추하지 못하도록 합니다. 이는 기본 클래스 정의에 대한 직접적인 지식이 없으면 컴파일러가 해당 멤버를 확인할 수 없기 때문입니다.

이 문제를 해결하려면 두 가지 옵션이 있습니다.

  1. 이 포인터를 사용하여 다음을 수행합니다. 기본 클래스 멤버에 명시적으로 액세스:
<code class="cpp">void bar() { cout << this->foo << endl; }
  1. 기본 클래스 이름 지정 명시적으로:
<code class="cpp">void bar() { cout << A<T>::foo << endl; }

이를 통해 GCC는 foo 멤버를 기본 클래스 A에 속하는 것으로 인식할 수 있습니다.

따라서 기본 클래스 멤버에 액세스하기 위한 올바른 구문은 템플릿 클래스는 this->foo 또는 A::foo입니다.

위 내용은 GCC를 사용하여 템플릿 함수의 기본 클래스 멤버에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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