Grinse-Hinze Geschrieben 23. März 2007 Geschrieben 23. März 2007 Servaz, ich muss grad eine Solution von VC++ 6.0 auf VS2005 portieren. Prinzipiell kein Problem, nur nutzt diese Solution die Stingray Library, und da mit der VS Version 2003 die Syntax für Templates geändert wurde, kann ich es nicht kompilieren. Ich weiß echt nichtmehr weiter weil einfach nichts funktioniert. Alles was ich ausprobiere geht schief...^^ Wenn das schon mal jemand gemacht hat bzw. sich damit auskennt --> Bitte schreiben!!! ThX4Help MfG Grinse-Hinze ;-) Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 Eine konkrete Fehlerbeschreibung, z.B. mit Codeausschnitt und Fehlermeldung, wäre sicher hilfreich Möglicherweise fehlen nur ein paar typenames. Zitieren
Grinse-Hinze Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 Jop... Mit den Typenames könntest du recht haben, ich peil nur nicht wo die rein sollen... Hier der Code: template <typename _Component, const GUID* _guid> class CComposite:public IQueryGuid { typedef CComposite<_Component, _guid> _thisClass; typedef std::list<_Component* > Children; class CompIterator:public Iterator<Children> //Hier kommt der Fehler... { public: friend class _thisClass; explicit CompIterator(Children& acoll): foundation::Iterator<Children>(acoll) {} }; public: typedef foundation::IteratorBase<_Component*> Iterator; // Composite design pattern operations //@cmember // Returns the number of nodes directly contained in this node int GetChildrenCount () const; //@cmember // Returns the total number of nodes contained by this node and its children int GetAllDescendantsCount () const; //@cmember // Returns this node's parent _Component* GetParent() const; //@cmember // Sets the parent node void SetParent(_Component* pComp); //@cmember // Returns the root of the composite tree _Component* GetRoot(); //@cmember // Adds a node as a child of this node int AddChild(_Component* pComp); //@cmember // Removes a child node int RemoveChild(_Component* pComp); //@cmember // Returns an iterator of this node's children Iterator* GetChildIterator(); protected: CComposite(): m_pParent(NULL) {} virtual ~CComposite() {} protected: // Composite design pattern implementation Children m_Children; _Component* m_pParent; }; In der Zeile (class CompIterator:public Iterator<Children>) kommt der Fehler... Fehler: Warning 1 warning C4346: 'std::list<_Component*>::iterator' : dependent name is not a type l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 2 error C2923: 'stingray::foundation::Iterator' : 'std::list<_Component*>::iterator' is not a valid template type argument for parameter '_Iter' l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Warning 3 warning C4346: 'std::list<_Component*>::value_type' : dependent name is not a type l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 4 error C2923: 'stingray::foundation::Iterator' : 'std::list<_Component*>::value_type' is not a valid template type argument for parameter '_Elem' l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 5 error C2955: 'stingray::foundation::Iterator' : use of class template requires template argument list l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 50 ThX4Help MfG Grinse-Hinze ;-) Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 Ich bin mir auch nicht sicher. Was passiert, wenn du das so schreibst? class CompIterator:public Iterator<typename Children> Zitieren
Grinse-Hinze Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 Das funktioniert: Warning 1 warning C4346: 'std::list<_Component*>::iterator' : dependent name is not a type l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 2 error C2923: 'stingray::foundation::Iterator' : 'std::list<_Component*>::iterator' is not a valid template type argument for parameter '_Iter' l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Warning 3 warning C4346: 'std::list<_Component*>::value_type' : dependent name is not a type l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 4 error C2923: 'stingray::foundation::Iterator' : 'std::list<_Component*>::value_type' is not a valid template type argument for parameter '_Elem' l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 5 error C2955: 'stingray::foundation::Iterator' : use of class template requires template argument list l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 50 Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 Das funktioniert::confused: Sind das nicht dieselben Fehlermeldungen wie vorher? Zitieren
Grinse-Hinze Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 Doch... das ist das gleiche, aber da kommt halt auch das gleiche.....^^ Und das funktioniert was ein Scherz...^^ ;-) Ich komm grad schon auf die Schiene dass ich mit Kopfschütteln und Grinsem im Gesicht vor meinem Notebook sitze...... Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 Ist das der Originalcode, oder hast du daran schon etwas geändert? class CompIterator:public Iterator<Children> //Hier kommt der Fehler... { public: friend class _thisClass; explicit CompIterator(Children& acoll): foundation::Iterator<Children>(acoll) {} };[/code] Das kann eigentlich so nie funktioniert haben, weil Iterator ein typedef dieser Klasse ist, kann also kein template sein. Stand da vorher vielleicht ein foundation:: vor Iterator? Immerhin wird das so in der Initialisierungsliste des Konstruktors aufgerufen. Zitieren
Grinse-Hinze Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 Ne, ich hab nur den Komentar "Hier kommt der Fehler" eingefügt... VC6.0 konnte es kompilieren. Das Ding steht halt in ner HeaderDatei... mehr kann ich dir auch nicht sagen... [EDIT] Es gibt noch eine andere HeaderDatei die dort eingebunden ist...Sie nennt sich interator.h... Ich poste sie mal hier, hab da schon was angepasst damit sie unter VS2005 funktoiniert: habs wieder rausgenommen, Copyright usw.. Will nicht in Schwierigkeiten geraten... Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 Schreib das doch mal so: class CompIterator:public foundation::Iterator<Children> Zitieren
Grinse-Hinze Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 Immernoch das selbe...^^ Warning 1 warning C4346: 'std::list<_Component*>::iterator' : dependent name is not a type l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 2 error C2923: 'stingray::foundation::Iterator' : 'std::list<_Component*>::iterator' is not a valid template type argument for parameter '_Iter' l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Warning 3 warning C4346: 'std::list<_Component*>::value_type' : dependent name is not a type l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 4 error C2923: 'stingray::foundation::Iterator' : 'std::list<_Component*>::value_type' is not a valid template type argument for parameter '_Elem' l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 49 Error 5 error C2955: 'stingray::foundation::Iterator' : use of class template requires template argument list l:\stingrayvs2005\objective studio\include\foundation\patterns\composite.h 50 Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 Eigenartig. Ich kann das hier - zumindest mit dem Codeausschnitt - nicht reproduzieren. Sind da noch irgendwelche Makros am Werk? Ich nehme an, ein Stingray-Update kommt nicht in Frage, oder? Zitieren
Grinse-Hinze Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 Stingray Update wäre eine Möglichkeit, hab grad auch mit meinem Chef drüber diskutiert. Der meinte auch dass das vielleicht einfacher wäre... Weißt du welche Version ich bräuchte damit ich es unter VS2005 nutzen kann??? P.S.: Denk daran dass sich aus der Sicht des eigenen Codes nichts verändert haben darf... Danke für deine Hilfe! MfG Grinse-Hinze ,-) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.