C++ エラー: テンプレートから派生したインスタンス化型は許可されていません。解決方法は?

王林
リリース: 2023-08-22 12:45:37
オリジナル
741 人が閲覧しました

C++ エラー: テンプレートから派生したインスタンス化型は許可されていません。解決方法は?

C プログラミング言語では、派生クラスでテンプレートのインスタンス化された型を使用すると、「テンプレートのインスタンス化された型からの派生は許可されていません」というコンパイラ エラーが発生することがあります。このエラーの理由は、それ自体がクラスではない、テンプレートでインスタンス化された型から新しいサブクラスを派生しようとしているためです。この記事では、エラーの原因と問題の解決策を説明します。

1. エラーの原因

テンプレートは、クラスや関数の作成に使用でき、さまざまなデータ型に従ってインスタンス化できる一般的なプログラミング ツールです。テンプレートを使用する場合は、テンプレート パラメーターを指定する必要があります。 C では、クラス テンプレートを使用する場合、クラス名の後にパラメータ リストを続ける必要があります。例:

template<typename T>
class MyClass {
    //...
};
ログイン後にコピー

このクラス テンプレートを使用するときは、特定の型を指定する必要があります:

MyClass<int> myObj;
ログイン後にコピー

これにより、MyClass テンプレートの int 特化バージョンが作成されます。

ただし、派生クラスでテンプレートのインスタンス化型を使用すると、上記のエラーが発生します。例:

template<typename T>
class MyClass {
    //...
};

class MyDerivedClass: public MyClass {
    //...
};
ログイン後にコピー

このコードでは、「テンプレート インスタンスからの派生は許可されていません。」というエラーが表示されます。 " タイプ"。

このエラーの理由は、MyClass が実際には実際のクラスではなく、テンプレートのインスタンス化タイプであるためです。したがって、テンプレートでインスタンス化された型から新しいサブクラスを派生しようとすると、上記のエラーが発生します。

2. 解決策

  1. テンプレート パラメーターを使用する

この問題を解決するには、テンプレート パラメーターを使用して、派生するクラスを指定します。たとえば、MyClass から新しいクラスを派生させたい場合は、次のように記述できます:

template<typename T>
class MyClass {
    //...
};

template
class MyDerivedClass: public MyClass {
    //...
};
ログイン後にコピー

これにより、エラーが回避されます。

  1. テンプレート エイリアスの使用

さらに、テンプレート エイリアス (テンプレート エイリアス) を使用して、この問題を解決することもできます。テンプレート エイリアスは、プログラムで使用するのに便利なテンプレートの新しい名前を提供できます。たとえば、上記のコードでは、テンプレート エイリアスを次のように定義できます。

template<typename T>
using MyNewClass = MyClass<T>;

class MyDerivedClass: public MyNewClass<int> {
    //...
};
ログイン後にコピー

このようにして、クラスをテンプレート エイリアスから派生できます。

概要

C では、テンプレートの使用は非常に一般的な方法ですが、テンプレートを使用して派生クラスの型をインスタンス化すると、「テンプレートからの派生は許可されていません」というコンパイラ エラーが発生しやすくなります。インスタンス化された型」の問題。解決策は 2 つあります。1 つはテンプレート パラメーターを使用して派生するクラスを指定する方法で、もう 1 つはテンプレート エイリアスを使用してテンプレートに新しい名前を付ける方法です。上記の方法により、この問題は簡単に解決できます。

以上がC++ エラー: テンプレートから派生したインスタンス化型は許可されていません。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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