Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Stingray in VS2005 kompilieren...

Empfohlene Antworten

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

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

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	


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

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.

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

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	


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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.