Problem beim Ableiten von Templates
-
Moin Leute!
Ich versuche eine Templateklasse von einem Template abzuleiten. Allerdings werde ich aus der Fehlermeldung, die mir der Compiler ausgibt, nicht ganz schlau...
Der Header sieht folgender Maßen aus:
#include <vector> namespace libos { template <class T> class VectorSecure : public std::vector<T> { template <class T> VectorSecure(); virtual ~VectorSecure(); }; }
Und die CPP-Datei so:
#include "stdafx.h" #include "CriticalSection.h" #include "vectorsecure.h" #include <vector> namespace libos { //Konstruktor template <class T> VectorSecure<T>::VectorSecure() { } //Destruktor template <class T> virtual VectorSecure<T>::~VectorSecure() { } }
Soweit also nichts großartiges. Allerdings knallt mir der Compiler immer die folgende Meldung um die Ohren:
1>d:\project\development\lib\libos\vectorsecure.cpp(12) : error C2244: 'libos::VectorSecure<T>::{ctor}' : unable to match function definition to an existing declaration 1> definition 1> 'libos::VectorSecure<T>::VectorSecure(void)' 1> existing declarations 1> 'libos::VectorSecure<T>::VectorSecure(void)'
Für mich sehen die Definition und die Deklaration die mir der Compiler angibt gleich aus, warum kann er die beiden also nicht matchen?
-
#include <vector> namespace libos { template <class T> class VectorSecure : public std::vector<T> { /*template <class T>*/ VectorSecure(); virtual ~VectorSecure(); }; }
wird hier nicht benötigt
-
Super, jetzt klappts. Danke!
-
y-vonne schrieb:
#include <vector> namespace libos { template <class T> class VectorSecure : public std::vector<T> { /*template <class T>*/ VectorSecure(); virtual ~VectorSecure(); }; }
wird hier nicht benötigt
Bedanke der Dekonstruktor von Vector ist nicht virtual.
-
Hallo Zeus.
Jo das ist richtig. Auch wenn du mich zitierst. Ich habe das ja nicht angeführt.
Und es heißt Destruktor nicht Dekonstruktor.@Hellcat. Von klassen die keinen virtuellen Destruktor haben, sollte man nicht ableiten. Also alle STL Containertypen. Siehe Scott Mayers Effektiv c++ programmieren Tipp 7.