23. März 200718 j 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 ;-)
23. März 200718 j Eine konkrete Fehlerbeschreibung, z.B. mit Codeausschnitt und Fehlermeldung, wäre sicher hilfreich Möglicherweise fehlen nur ein paar typenames.
23. März 200718 j 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 ;-)
23. März 200718 j Ich bin mir auch nicht sicher. Was passiert, wenn du das so schreibst? class CompIterator:public Iterator<typename Children>
23. März 200718 j 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
23. März 200718 j 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......
23. März 200718 j 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.
23. März 200718 j 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...
23. März 200718 j 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
23. März 200718 j 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?
23. März 200718 j 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 ,-)
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.