提供されたコードは GCC ではコンパイルに失敗しますが、Visual Studio では成功します。 bar 関数の基本クラスの foo メンバーにアクセスしようとすると、GCC は foo が現在のスコープ内で宣言されていないことを示すエラーに遭遇します。
公式の C 仕様に従って、GCC は次のような特定のルールに従います。基本クラスがテンプレート クラスの場合、コンパイラが基本クラスのメンバーを推論しないようにします。これは、基本クラスの定義を直接知らなければ、コンパイラがそのメンバーを決定できないためです。
この問題を解決するには、2 つのオプションがあります。
<code class="cpp">void bar() { cout << this->foo << endl; }
<code class="cpp">void bar() { cout << A<T>::foo << endl; }</code>
これにより、GCC は foo メンバーを次のように認識できるようになります。基本クラス A
したがって、テンプレート クラスの基本クラス メンバーにアクセスするための正しい構文は this->foo または A
以上がGCC を使用してテンプレート関数の基本クラスのメンバーにアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。