Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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 ;-)

Geschrieben

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 ;-)

Geschrieben

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	


Geschrieben

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......

Geschrieben

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.

Geschrieben

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...

Geschrieben

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	


Geschrieben

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 ,-)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...