Fehler bei Template Vererbung



  • Was ist hier falsch? Warum kompiliert MSVC 6 das und dev-c++ nicht?

    (Dev-c++ meldet, length sei undefiniert.)

    #include <iostream>
    
    using namespace std;
    
    template <class T>
    class Container
    {
    protected: 
    
    public: 
          T length;     
          Container()
          {
          }
          ~Container()
          {
    
          }
    };
    
    template <class T>
    class Liste: public Container<T>
    {
    
    protected:
    
    public:
          Liste()
          {
    
          }
          void SetLength(T len)
          {
               length = len;            
          }
          ~Liste()
          {
          }   
    };
    
    int main()
    {
        cout << "true" <<endl;
        int a;
        Container<int> con;
        con.length = 23;
        cin >> a;
    	return 0;
    }
    

    Danke!



  • Die Antwort habe ich hier bereits gegeben:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-109280.html

    Warum kompiliert MSVC 6 das und dev-c++ nicht?

    Weil der VC in diesem Punkt nicht standardkonform ist und das sogenannte "2 phase name lookup" für Templates nicht implementiert. Der VC 6.0 prüft ein Template erst bei der Instanziierung.
    Er müsste allerdings eigentlich bereits das uninstanziierte Template prüfen.


Anmelden zum Antworten