Vererbung von Template Klassen und Seattle (BCC64)



  • Hallo,

    ich verwende seit mehreren RAD Studio Versionen (zuletzt XE8) den 64bit C++ Compiler. Bisher hatte ich nie ein Problem, wenn ich von einer Template Klassen erbe.

    Seit RAD Studio 10 Seattle habe ich folgendes Problem: Ich erbe von einer Template Klasse und sobald ich in meiner Klasse auf eine Variable der Basisklasse zugreifen möchte, bekomme ich vom BCC64 Compiler den Fehler, dass diese Variable nicht deklariert sei.

    Haben die eine Neuerung eingeführt, die ich übersehen habe oder mache ich vielleicht irgendwas falsch??

    Beispiel:

    **A.cpp:
    **

    template<class TClass>
    
    class A
    {
    protected:
    	HANDLE waitHandle;
    	...
    public:
    
    	...
    	virtual HANDLE __fastcall InitializeWaitHandle()
    	{
    		return waitHandle;
    	}
    	...	
    };
    

    B.cpp:

    #include "a.cpp"
    
    template<class TClass>
    
    class B : public A<TClass>
    {
    public:
    
    	...
    	virtual HANDLE __fastcall InitializeWaitHandle()
    	{
    		waitHandle = semaphore->Open();
    
    		return waitHandle;
    	}
    	...
    };
    


  • Du musst den Variablennamen explizit qualifizieren, entweder mit A<TClass>::waitHandle oder this->waitHandle .



  • Vielen Dank, mit this->waitHandle klappt es tatsächlich.
    Darauf wäre ich nie gekommen, denn eigentlich war der Zugriff über this nie erforderlich, außer man hat z.B. ein Übergabeparameter, der gleichnamig ist.



  • Das hängt vom Compiler ab. Hier findest du Genaueres.



  • Okay alles klar.
    Vielen Dank.


Anmelden zum Antworten