ホームページ  >  記事  >  バックエンド開発  >  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 は次のような特定のルールに従います。基本クラスがテンプレート クラスの場合、コンパイラが基本クラスのメンバーを推論しないようにします。これは、基本クラスの定義を直接知らなければ、コンパイラがそのメンバーを決定できないためです。

この問題を解決するには、2 つのオプションがあります。

  1. this ポインタを使用して、基本クラスのメンバーに明示的にアクセスします:
<code class="cpp">void bar() { cout << this->foo << endl; }
  1. 基本クラス名を明示的に指定します:
<code class="cpp">void bar() { cout << A<T>::foo << endl; }</code>

これにより、GCC は foo メンバーを次のように認識できるようになります。基本クラス A に属します。

したがって、テンプレート クラスの基本クラス メンバーにアクセスするための正しい構文は this->foo または A::foo です。

以上がGCC を使用してテンプレート関数の基本クラスのメンバーにアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。