Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Kompilierungsfehler: Der Vorlagenparameter ist auf diesen Typ nicht anwendbar. Wie soll ich ihn ändern?

C++-Kompilierungsfehler: Der Vorlagenparameter ist auf diesen Typ nicht anwendbar. Wie soll ich ihn ändern?

WBOY
WBOYOriginal
2023-08-22 14:15:44837Durchsuche

C++-Kompilierungsfehler: Der Vorlagenparameter ist auf diesen Typ nicht anwendbar. Wie soll ich ihn ändern?

C++ ist eine weit verbreitete Programmiersprache mit vielen Vorlagen, die es Programmierern ermöglichen, schnell Codes zu erstellen, die für verschiedene Datentypen und Algorithmen gelten. Bei der Verwendung von Vorlagen treten jedoch auch einige Kompilierungsfehler auf, darunter „Vorlagenparameter sind auf diesen Typ nicht anwendbar“. In diesem Artikel werden die Hintergründe, Ursachen und Lösungen für diesen Fehler detailliert beschrieben.

Hintergrund

Template in C++ ist ein allgemeines Programmiermuster, das zum Generieren verschiedener Codetypen verwendet werden kann. Beispielsweise können wir Vorlagen verwenden, um eine allgemeine Funktion zu erstellen, die verschiedene Parametertypen empfangen und basierend auf dem Typ dynamisch verschiedene Codes aufrufen kann.

Vorlagenparameter in C++ werden in Typparameter und Nichttypparameter unterteilt. Typparameter beziehen sich auf den Datentyp, der in der Vorlage verwendet werden soll, während sich Nichttypparameter auf einige Konstanten oder Funktionszeiger usw. beziehen. Diese Parameter müssen zur Kompilierungszeit bestimmt werden.

Normalerweise sollten die in Vorlagen verwendeten Typparameter auf verschiedene Datentypen anwendbar sein, aber manchmal tritt ein Kompilierungsfehler mit der Meldung „Die Vorlagenparameter sind auf diesen Typ nicht anwendbar“ auf. Als nächstes stellen wir die Ursachen und Lösungen dieses Fehlers vor.

Ursache

Der Vorlagenparameter ist auf diesen Typ nicht anwendbar. Der Fehler wird normalerweise aus folgenden Gründen verursacht:

  1. Nichtübereinstimmung des Vorlagenparametertyps:

Wenn wir eine Vorlage definieren, sollte der Typ des Vorlagenparameters unseren Anforderungen entsprechen Der Typ der übergebenen Daten. Wenn der übergebene Datentyp nicht mit dem Vorlagenparametertyp übereinstimmt, wird ein Fehler gemeldet.

Im folgenden Code definieren wir beispielsweise eine Vorlagenfunktion und verwenden den Vorlagenparameter T innerhalb der Funktion:

template <typename T>
void print(T value) {
    cout << value << endl;
}

Dann rufen wir diese Funktion auf und übergeben einen String als Parameter, und es wird ein Fehler gemeldet:

print("hello");  // 模板参数不适用于这个类型

Das liegt daran, dass der Parametertyp in der Vorlagenfunktion mit dem Typ des übergebenen Parameters identisch sein muss. Was hier übergeben wird, ist eine Zeichenfolgenkonstante und der Vorlagenparametertyp ist T, sodass ein Fehler auftritt.

  1. Typ ist nicht definiert:

Wenn wir einen undefinierten Typ als Vorlagenparameter verwenden, kann der Compiler diesen Typ nicht finden und meldet einen Fehler.

Im folgenden Code definieren wir beispielsweise eine Vorlagenklasse, die einen undefinierten Typparameter verwendet:

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

int main() {
    Test<UnknownType> a; // 模板参数不适用于这个类型
    return 0;
}

Im obigen Code definieren wir einen undefinierten Typ namens UnknownType, wenn wir eine Vorlagenklasse definieren, wenn wir sie als Vorlage übergeben Parameter, tritt beim Kompilieren ein Fehler auf.

  1. Vorlagenparameter erfüllen nicht die Anforderungen:

Manchmal fügen wir auch einige Einschränkungen zu den Vorlagenparametern hinzu, z. B. dass nur bestimmte Datentypen übergeben werden dürfen. Wenn der von uns übergebene Datentyp die Einschränkungen nicht erfüllt, wird ein Fehler gemeldet.

Im folgenden Code definieren wir beispielsweise eine Vorlagenfunktion, die nur die Übergabe von Parametern vom Typ Integer zulässt:

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

int main() {
    print(3.14); // 模板参数不适用于这个类型
    return 0;
}

Im obigen Code verwenden wir die Vorlage is_integral, um zu bestimmen, ob der Vorlagenparametertyp eine Ganzzahl ist Wenn nicht, wird eine Fehlermeldung ausgegeben. Beim Aufruf der Druckfunktion übergeben wir Gleitkommaparameter, was dazu führt, dass die Kompilierung fehlschlägt.

Lösung

Wenn ein Kompilierungsfehler auftritt, der besagt, dass Vorlagenparameter für diesen Typ nicht geeignet sind, können wir die folgenden Lösungen ausprobieren:

  1. Überprüfen Sie, ob der Vorlagenparametertyp mit dem eingehenden Parametertyp übereinstimmt.

Wenn diese Art von Fehler auftritt Wenn ein Fehler auftritt, sollten Sie zunächst prüfen, ob der Vorlagenparametertyp und der eingehende Parametertyp übereinstimmen. Wenn sie nicht übereinstimmen, müssen sie geändert werden.

  1. Bestätigen Sie, ob der verwendete Typ definiert wurde

Wenn ein undefinierter Typ als Vorlagenparameter verwendet wird, müssen Sie den Typ im Programm definieren oder einen definierten Typ verwenden.

  1. Bestätigen Sie, ob die Vorlagenparameter die Anforderungen erfüllen

Wenn Sie eine Vorlage mit Einschränkungen verwenden, sollten Sie sicherstellen, dass die übergebenen Parametertypen die Anforderungen erfüllen. Wenn dies nicht der Fall ist, müssen Sie den Parametertyp oder die Einschränkungen ändern.

Zusammenfassung

Template ist eine sehr wichtige Funktion in C++, die es uns ermöglicht, allgemeinen Code flexibler zu schreiben. Bei der Verwendung von Vorlagen treten jedoch auch einige Kompilierungsfehler auf, darunter „Vorlagenparameter sind auf diesen Typ nicht anwendbar“. Dieser Artikel stellt die Ursachen und Lösungen für diesen Fehler anhand von Codebeispielen vor und hofft, den Lesern dabei zu helfen, C++-Vorlagen besser zu verstehen und zu verwenden.

Das obige ist der detaillierte Inhalt vonC++-Kompilierungsfehler: Der Vorlagenparameter ist auf diesen Typ nicht anwendbar. Wie soll ich ihn ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn