Heim > Backend-Entwicklung > C++ > C++-Fehler: Der von der Vorlage abgeleitete Instanziierungstyp ist nicht zulässig. Wie kann er behoben werden?

C++-Fehler: Der von der Vorlage abgeleitete Instanziierungstyp ist nicht zulässig. Wie kann er behoben werden?

王林
Freigeben: 2023-08-22 12:45:37
Original
774 Leute haben es durchsucht

C++-Fehler: Der von der Vorlage abgeleitete Instanziierungstyp ist nicht zulässig. Wie kann er behoben werden?

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 {
    //...
};
Nach dem Login kopieren

Wenn wir diese Klassenvorlage verwenden, müssen wir einen konkreten Typ angeben:

MyClass<int> myObj;
Nach dem Login kopieren

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 {
    //...
};
Nach dem Login kopieren

Dieser Code löst die Fehlermeldung „Ableitung von vorlageninstanziierten Typen ist nicht zulässig“ aus.

Der Grund für diesen Fehler ist, dass MyClass eigentlich ein Vorlageninstanziierungstyp ist, keine echte Klasse. Daher führt der Versuch, eine neue Unterklasse von einem durch eine Vorlage instanziierten Typ abzuleiten, zu dem oben genannten Fehler.

2. Lösung

  1. Vorlagenparameter verwenden

Um dieses Problem zu lösen, können wir Vorlagenparameter verwenden, um die abzuleitende Klasse anzugeben. Wenn wir beispielsweise eine neue Klasse von MyClass ableiten möchten, können wir so schreiben:

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

template
class MyDerivedClass: public MyClass {
    //...
};
Nach dem Login kopieren

Dadurch werden Fehler vermieden.

  1. Vorlagen-Alias ​​verwenden

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> {
    //...
};
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage