제공된 코드는 GCC에서는 컴파일에 실패했지만 Visual Studio에서는 성공했습니다. bar 함수에서 기본 클래스의 foo 멤버에 액세스하려고 시도할 때 GCC는 foo가 현재 범위 내에서 선언되지 않았다는 오류에 직면합니다.
공식 C 사양에 따르면 GCC는 다음과 같은 특정 규칙을 준수합니다. 기본 클래스가 템플릿 클래스인 경우 컴파일러가 기본 클래스의 멤버를 유추하지 못하도록 합니다. 이는 기본 클래스 정의에 대한 직접적인 지식이 없으면 컴파일러가 해당 멤버를 확인할 수 없기 때문입니다.
이 문제를 해결하려면 두 가지 옵션이 있습니다.
<code class="cpp">void bar() { cout << this->foo << endl; }
<code class="cpp">void bar() { cout << A<T>::foo << endl; }
이를 통해 GCC는 foo 멤버를 기본 클래스 A 따라서 기본 클래스 멤버에 액세스하기 위한 올바른 구문은 템플릿 클래스는 this->foo 또는 A 위 내용은 GCC를 사용하여 템플릿 함수의 기본 클래스 멤버에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!