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 中国語 Web サイトの他の関連記事を参照してください。