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.


Log in to reply