ホームページ > バックエンド開発 > C++ > C++ コンパイル エラー: テンプレート パラメーターはこの型には適用できません。どのように変更すればよいですか?

C++ コンパイル エラー: テンプレート パラメーターはこの型には適用できません。どのように変更すればよいですか?

WBOY
リリース: 2023-08-22 14:15:44
オリジナル
921 人が閲覧しました

C++ コンパイル エラー: テンプレート パラメーターはこの型には適用できません。どのように変更すればよいですか?

C は、プログラマーがさまざまなデータ型やアルゴリズムに共通するコードを迅速に作成できるようにする多くのテンプレートを備えた、広く使用されているプログラミング言語です。ただし、テンプレートを使用するときにいくつかのコンパイル エラーが発生することもあります。その 1 つは、「テンプレート パラメーターはこの型には適用できません」です。この記事では、このエラーの背景、原因、解決策について詳しく説明します。

背景

C のテンプレートは、さまざまな種類のコードを生成するために使用できる一般的なプログラミング パターンです。たとえば、テンプレートを使用して、さまざまなタイプのパラメーターを受け取り、そのタイプに基づいてさまざまなコードを動的に呼び出すことができる一般的な関数を作成できます。

C のテンプレート パラメーターは、型パラメーターと非型パラメーターの 2 つのタイプに分類されます。型パラメータはテンプレートで使用されるデータ型を指し、非型パラメータは定数や関数ポインタなどを指します。これらのパラメータはコンパイル時に決定する必要があります。

通常、テンプレートで使用される型パラメーターはさまざまなデータ型に適用できるはずですが、コンパイル エラーが発生し、「テンプレート パラメーターはこの型には適用できません」というメッセージが表示されることがあります。次に、このエラーの原因と解決策を紹介します。

原因

「テンプレート パラメーターはこの型には適用できません」エラーは通常、次の理由によって発生します:

  1. テンプレート パラメーターの型が一致しません:

テンプレートを定義する場合、テンプレート パラメーターの型は、渡す必要があるデータ型に準拠する必要があります。渡されたデータ型がテンプレート パラメーターの型と一致しない場合、エラーが報告されます。

たとえば、次のコードでは、テンプレート関数を定義し、関数内でテンプレート パラメーター T を使用します。

template <typename T>
void print(T value) {
    cout << value << endl;
}
ログイン後にコピー

次に、この関数を呼び出し、文字列をパラメーターとして渡します。エラーが報告されます:

print("hello");  // 模板参数不适用于这个类型
ログイン後にコピー

これは、テンプレート関数のパラメーターの型が受信パラメーターの型と同じである必要があるためです。ここで渡されるのは文字列定数であり、テンプレート パラメーターの型です。がTなので、それは間違いです。

  1. 型が定義されていません:

未定義の型をテンプレート パラメーターとして使用すると、コンパイラは型を見つけることができず、エラーが報告されます。

たとえば、次のコードでは、未定義の型パラメータを使用するテンプレート クラスを定義します。

template <typename T>
class Test {
public:
    void print(T value) {
        cout << value << endl;
    }
};

int main() {
    Test<UnknownType> a; // 模板参数不适用于这个类型
    return 0;
}
ログイン後にコピー

上記のコードでは、UnknownType という名前の未定義の型を定義します。型を定義して渡します。テンプレート クラスを定義するときにテンプレート パラメーターとして使用すると、コンパイル時にエラーが発生します。

  1. テンプレート パラメーターが要件を満たしていません:

特定のデータ型のみを渡すことを許可するなど、テンプレート パラメーターに制限を追加することがあります。渡したデータ型が制限を満たしていない場合、エラーが報告されます。

たとえば、次のコードでは、整数型パラメータのみを渡すことを許可するテンプレート関数を定義します。

template <typename T>
void print(T value) {
    static_assert(is_integral<T>::value, "只允许传入整数类型的参数");
    cout << value << endl;
}

int main() {
    print(3.14); // 模板参数不适用于这个类型
    return 0;
}
ログイン後にコピー

上記のコードでは、is_integral テンプレートを使用して、テンプレートパラメータの型 整数型であるかどうか。そうでない場合は、エラーメッセージが出力されます。 print 関数を呼び出すときに浮動小数点パラメータを渡すため、コンパイルが失敗します。

解決策

テンプレート パラメーターがこの型に適していないというコンパイル エラーが発生した場合は、次の解決策を試すことができます:

  1. テンプレート パラメーターの型を確認する受信パラメータの型と一致するかどうか

このエラーが発生した場合は、まずテンプレート パラメータの型と受信パラメータの型が一致するかどうかを確認し、一致しない場合は変更する必要があります。

  1. 使用する型が定義されているかどうかを確認する

未定義の型をテンプレート パラメーターとして使用する場合は、プログラム内で型を定義するか、定義済みの型を使用する必要があります。タイプタイプ。

  1. テンプレート パラメーターが要件を満たしているかどうかを確認する

制限のあるテンプレートを使用する場合は、渡されたパラメーターの種類が要件を満たしていることを確認する必要があります。準拠していない場合は、パラメータのタイプを変更するか、制限を変更する必要があります。

概要

テンプレートは C の非常に重要な機能であり、これにより一般的なコードをより柔軟に記述することができます。ただし、テンプレートを使用すると、いくつかのコンパイル エラーも発生します。その 1 つは、「テンプレート パラメーターはこの型には適用できません」です。この記事では、読者が C テンプレートをよりよく理解して使用できるように、このエラーの原因と解決策をコード例とともに紹介します。

以上がC++ コンパイル エラー: テンプレート パラメーターはこの型には適用できません。どのように変更すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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