Wenn wir in der Programmiersprache C++ vorlageninstanziierte Typen in abgeleiteten Klassen verwenden, kann es zu dem Problem kommen, dass der Compiler „Abgeleitet von vorlageninstanziierten Typen nicht zulässig“ meldet. Der Grund für diesen Fehler liegt darin, dass wir versuchen, eine neue Unterklasse von einem durch eine Vorlage instanziierten Typ abzuleiten, der selbst keine Klasse ist. In diesem Artikel wird die Fehlerursache erläutert und eine Lösung für das Problem bereitgestellt.
1. Fehlerursache
Template ist ein allgemeines Programmiertool. Es kann zum Erstellen von Klassen oder Funktionen verwendet werden und kann entsprechend verschiedenen Datentypen instanziiert werden. Bei der Verwendung von Vorlagen müssen Vorlagenparameter angegeben werden. In C++ muss bei Verwendung einer Klassenvorlage dem Klassennamen eine Parameterliste folgen. Zum Beispiel:
template<typename T> class MyClass { //... };
Wenn wir diese Klassenvorlage verwenden, müssen wir einen konkreten Typ angeben:
MyClass<int> myObj;
Dadurch wird eine int-Spezialisierung der MyClass-Vorlage erstellt.
Wenn wir jedoch vorlageninstanziierte Typen in abgeleiteten Klassen verwenden, tritt der obige Fehler auf, zum Beispiel:
template<typename T> class MyClass { //... }; class MyDerivedClass: public MyClass{ //... };
Dieser Code löst die Fehlermeldung „Ableitung von vorlageninstanziierten Typen ist nicht zulässig“ aus.
Der Grund für diesen Fehler ist, dass MyClass
2. Lösung
Um dieses Problem zu lösen, können wir Vorlagenparameter verwenden, um die abzuleitende Klasse anzugeben. Wenn wir beispielsweise eine neue Klasse von MyClass
template<typename T> class MyClass { //... }; templateclass MyDerivedClass: public MyClass { //... };
Dadurch werden Fehler vermieden.
Darüber hinaus können wir auch Vorlagen-Alias (Vorlagen-Alias) verwenden, um dieses Problem zu lösen. Vorlagenaliase können einer Vorlage einen neuen Namen geben, der für uns im Programm praktisch ist. Im obigen Code kann der Vorlagenalias beispielsweise wie folgt definiert werden:
template<typename T> using MyNewClass = MyClass<T>; class MyDerivedClass: public MyNewClass<int> { //... };
Auf diese Weise kann eine Klasse von einem Vorlagenalias abgeleitet werden.
Zusammenfassung
In C++ ist die Verwendung von Vorlagen eine sehr gängige Praxis, aber bei der Verwendung von vorlageninstanziierten Typen in abgeleiteten Klassen kann es leicht zu dem Compilerfehler „Abgeleitet von vorlageninstanziierten Typen nicht zulässig“ kommen. Es gibt zwei Lösungen: Eine besteht darin, Vorlagenparameter zu verwenden, um die abzuleitende Klasse anzugeben, und die andere darin, einen Vorlagenalias zu verwenden, um einen neuen Namen für die Vorlage bereitzustellen. Mit den oben genannten Methoden können wir dieses Problem leicht lösen.
Das obige ist der detaillierte Inhalt vonC++-Fehler: Der von der Vorlage abgeleitete Instanziierungstyp ist nicht zulässig. Wie kann er behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!