GCC 컴파일 오류: 템플릿 인수에 따라 기본 클래스 멤버에 액세스
C에서 템플릿 클래스에서 상속할 때 파생 클래스 내의 기본 클래스는 이 사용자가 직면하는 것처럼 때때로 문제를 일으킬 수 있습니다. 코드 조각이 제공됩니다.
<code class="cpp">template <typename T> class A { public: T foo; }; template <typename T> class B: public A<T> { public: void bar() { cout << foo << endl; } };</code>
이 코드를 GCC로 컴파일할 때 사용자에게 오류가 발생합니다.
error: ‘foo’ was not declared in this scope
그러나 문제가 있는 멤버 'foo'는 다음 내에서 액세스할 수 있어야 합니다. 파생 클래스입니다.
이 문제는 C 11 이상에서 컴파일러가 더 이상 중첩된 템플릿의 변수 유형을 자동으로 추론할 수 없다는 사실에서 발생합니다. 이러한 제한은 파생 클래스를 컴파일할 때 컴파일러가 기본 클래스에 'foo' 멤버의 존재를 유추하는 것을 방지합니다.
문제를 해결하려면 기본 클래스 이름을 통해 해당 멤버에 명시적으로 액세스할 수 있습니다.
<code class="cpp">void bar() { cout << A<T>::foo << endl; }
또는 'this' 포인터를 사용할 수 있습니다.
<code class="cpp">void bar() { cout << this->foo << endl; }</code>
이러한 솔루션은 'foo' 멤버가 기본 클래스에 속함을 명시적으로 나타내므로 컴파일러가 올바르게 식별할 수 있습니다. 사용법을 해결합니다.
위 내용은 GCC를 사용하여 템플릿 파생 클래스의 기본 클래스 멤버에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!