ホームページ > バックエンド開発 > C++ > GCC を使用してテンプレート派生クラスの基本クラス メンバーにアクセスできないのはなぜですか?

GCC を使用してテンプレート派生クラスの基本クラス メンバーにアクセスできないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-02 16:08:02
オリジナル
994 人が閲覧しました

Why Can't I Access Base Class Members in a Template-Derived Class with GCC?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート