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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 16:08:02932ブラウズ

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

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