<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[problem mit std::set]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein problem mit der Benutzung des containers std::set. Wenn ich diesen benutzen will gibt mir der gcc eine lange liste fehler aus.</p>
<pre><code>/usr/include/c++/4.3/bits/stl_tree.h: In instantiation of ‘std::_Rb_tree_node&lt;Service&gt;’:
/usr/include/c++/4.3/bits/stl_tree.h:941:   instantiated from ‘void std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::_M_erase(std::_Rb_tree_node&lt;_Val&gt;*) [with _Key = Service, _Val = Service, _KeyOfValue = std::_Identity&lt;Service&gt;, _Compare = std::less&lt;Service&gt;, _Alloc = std::allocator&lt;Service&gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:585:   instantiated from ‘std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::~_Rb_tree() [with _Key = Service, _Val = Service, _KeyOfValue = std::_Identity&lt;Service&gt;, _Compare = std::less&lt;Service&gt;, _Alloc = std::allocator&lt;Service&gt;]’
/usr/include/c++/4.3/bits/stl_set.h:93:   instantiated from ‘void __gnu_cxx::new_allocator&lt;_Tp&gt;::destroy(_Tp*) [with _Tp = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:390:   instantiated from ‘void std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::_M_destroy_node(std::_Rb_tree_node&lt;_Val&gt;*) [with _Key = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, _Val = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;, _KeyOfValue = std::_Select1st&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;, _Compare = std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;, _Alloc = std::allocator&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:943:   instantiated from ‘void std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::_M_erase(std::_Rb_tree_node&lt;_Val&gt;*) [with _Key = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, _Val = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;, _KeyOfValue = std::_Select1st&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;, _Compare = std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;, _Alloc = std::allocator&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:585:   instantiated from ‘std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::~_Rb_tree() [with _Key = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, _Val = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;, _KeyOfValue = std::_Select1st&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;, _Compare = std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;, _Alloc = std::allocator&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_map.h:92:   instantiated from here
/usr/include/c++/4.3/bits/stl_tree.h:135: error: cannot declare field ‘std::_Rb_tree_node&lt;Service&gt;::_M_value_field’ to be of abstract type ‘Service’
Service.h:12: note:   because the following virtual functions are pure within ‘Service’:
Service.h:17: note: 	virtual void Service::service()
</code></pre>
<p>Nun kann ich leider nix mit diesen Meldungen anfangen. Ich poste euch noch die 2 beteiligten klassen service und dispatcher. Mit dem container std::vector habe ich die Probleme nicht. Würde aber gerne std::set benutzen da die &quot;Services&quot; nur einmal in dem container vorkommen sollten. Hat mir vlt jemand einen rat oder tip? Die Fehler treten nur beim compilen von der Klasse Dispatcher auf.</p>
<p>Hier noch die 2 Klassen Definitionen:</p>
<p>Dispatcher</p>
<pre><code class="language-cpp">#ifndef _DISPATCHER_H
#define _DISPATCHER_H

#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &quot;Service.h&quot;

class Service;

class Dispatcher
{
	private:
		//Methods
		Dispatcher();
		~Dispatcher();

		//Members
		static Dispatcher *uniqueInstance;

		//stores service and its mirrors
		typedef std::map&lt;std::string, std::set&lt;Service&gt; &gt; myMapType;
		 myMapType serviceList;

       int randomIndex(const int&amp;);
	public:
      static Dispatcher* getInstance();
		static Dispatcher* instance();

		Service&amp; locate(const std::string&amp;);

      void registerService(Service&amp;);
      void deregisterService(Service&amp;);
};

#endif
</code></pre>
<p>und noch die Klasse Service</p>
<pre><code class="language-cpp">#ifndef _SERVICE_H
#define _SERVICE_H

#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;vector&gt;
#include &quot;Dispatcher.h&quot;

class Dispatcher;

class Service
{
	public:
		Service(const std::string&amp; type, const std::string&amp; prov);
      Service(const Service&amp;);
		virtual ~Service();
		virtual void service()=0;

      // Getter
      virtual std::string getProvider() const;
      virtual std::string getServiceType() const;

      // Setter
      virtual void setServiceType(const std::string&amp;);
      virtual void setProvider(const std::string&amp;);

      // operators
      virtual Service&amp; operator=(const Service&amp;);
      friend bool operator&lt;(const Service&amp; val1, const Service&amp; val2)
      {
         return (val1.provider &lt; val2.provider);
      }

   protected:
      // Methods
		virtual void registerAtDispatcher();
		virtual void deregisterFromDispatcher();

      // Members
      Dispatcher *disp;
      std::string serviceType;
      std::string provider;

};

#endif
</code></pre>
<p>Falls ihr auch noch die cpp datein braucht sagt bescheid.</p>
<p>MFG<br />
blups0r</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237796/problem-mit-std-set</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 05:28:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237796.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Apr 2009 00:12:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem mit std::set on Thu, 02 Apr 2009 00:12:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein problem mit der Benutzung des containers std::set. Wenn ich diesen benutzen will gibt mir der gcc eine lange liste fehler aus.</p>
<pre><code>/usr/include/c++/4.3/bits/stl_tree.h: In instantiation of ‘std::_Rb_tree_node&lt;Service&gt;’:
/usr/include/c++/4.3/bits/stl_tree.h:941:   instantiated from ‘void std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::_M_erase(std::_Rb_tree_node&lt;_Val&gt;*) [with _Key = Service, _Val = Service, _KeyOfValue = std::_Identity&lt;Service&gt;, _Compare = std::less&lt;Service&gt;, _Alloc = std::allocator&lt;Service&gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:585:   instantiated from ‘std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::~_Rb_tree() [with _Key = Service, _Val = Service, _KeyOfValue = std::_Identity&lt;Service&gt;, _Compare = std::less&lt;Service&gt;, _Alloc = std::allocator&lt;Service&gt;]’
/usr/include/c++/4.3/bits/stl_set.h:93:   instantiated from ‘void __gnu_cxx::new_allocator&lt;_Tp&gt;::destroy(_Tp*) [with _Tp = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:390:   instantiated from ‘void std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::_M_destroy_node(std::_Rb_tree_node&lt;_Val&gt;*) [with _Key = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, _Val = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;, _KeyOfValue = std::_Select1st&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;, _Compare = std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;, _Alloc = std::allocator&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:943:   instantiated from ‘void std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::_M_erase(std::_Rb_tree_node&lt;_Val&gt;*) [with _Key = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, _Val = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;, _KeyOfValue = std::_Select1st&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;, _Compare = std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;, _Alloc = std::allocator&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_tree.h:585:   instantiated from ‘std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::~_Rb_tree() [with _Key = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, _Val = std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt;, _KeyOfValue = std::_Select1st&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;, _Compare = std::less&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; &gt;, _Alloc = std::allocator&lt;std::pair&lt;const std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, std::set&lt;Service, std::less&lt;Service&gt;, std::allocator&lt;Service&gt; &gt; &gt; &gt;]’
/usr/include/c++/4.3/bits/stl_map.h:92:   instantiated from here
/usr/include/c++/4.3/bits/stl_tree.h:135: error: cannot declare field ‘std::_Rb_tree_node&lt;Service&gt;::_M_value_field’ to be of abstract type ‘Service’
Service.h:12: note:   because the following virtual functions are pure within ‘Service’:
Service.h:17: note: 	virtual void Service::service()
</code></pre>
<p>Nun kann ich leider nix mit diesen Meldungen anfangen. Ich poste euch noch die 2 beteiligten klassen service und dispatcher. Mit dem container std::vector habe ich die Probleme nicht. Würde aber gerne std::set benutzen da die &quot;Services&quot; nur einmal in dem container vorkommen sollten. Hat mir vlt jemand einen rat oder tip? Die Fehler treten nur beim compilen von der Klasse Dispatcher auf.</p>
<p>Hier noch die 2 Klassen Definitionen:</p>
<p>Dispatcher</p>
<pre><code class="language-cpp">#ifndef _DISPATCHER_H
#define _DISPATCHER_H

#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &quot;Service.h&quot;

class Service;

class Dispatcher
{
	private:
		//Methods
		Dispatcher();
		~Dispatcher();

		//Members
		static Dispatcher *uniqueInstance;

		//stores service and its mirrors
		typedef std::map&lt;std::string, std::set&lt;Service&gt; &gt; myMapType;
		 myMapType serviceList;

       int randomIndex(const int&amp;);
	public:
      static Dispatcher* getInstance();
		static Dispatcher* instance();

		Service&amp; locate(const std::string&amp;);

      void registerService(Service&amp;);
      void deregisterService(Service&amp;);
};

#endif
</code></pre>
<p>und noch die Klasse Service</p>
<pre><code class="language-cpp">#ifndef _SERVICE_H
#define _SERVICE_H

#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;vector&gt;
#include &quot;Dispatcher.h&quot;

class Dispatcher;

class Service
{
	public:
		Service(const std::string&amp; type, const std::string&amp; prov);
      Service(const Service&amp;);
		virtual ~Service();
		virtual void service()=0;

      // Getter
      virtual std::string getProvider() const;
      virtual std::string getServiceType() const;

      // Setter
      virtual void setServiceType(const std::string&amp;);
      virtual void setProvider(const std::string&amp;);

      // operators
      virtual Service&amp; operator=(const Service&amp;);
      friend bool operator&lt;(const Service&amp; val1, const Service&amp; val2)
      {
         return (val1.provider &lt; val2.provider);
      }

   protected:
      // Methods
		virtual void registerAtDispatcher();
		virtual void deregisterFromDispatcher();

      // Members
      Dispatcher *disp;
      std::string serviceType;
      std::string provider;

};

#endif
</code></pre>
<p>Falls ihr auch noch die cpp datein braucht sagt bescheid.</p>
<p>MFG<br />
blups0r</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689625</guid><dc:creator><![CDATA[blups0r]]></dc:creator><pubDate>Thu, 02 Apr 2009 00:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::set on Thu, 02 Apr 2009 00:18:11 GMT]]></title><description><![CDATA[<p>Lösch doch einfach die Zeile <code>#include &quot;Dispatcher.h&quot;</code> aus <code>Service.h</code> , dann sollte es gehen.</p>
<p>Wenn du lang und scharf nachdenkst, wirst du vermutlich auch draufkommen wieso. Übrigens kann es auch mit std::vector nicht gehen. Vermutlich hast du zwei Änderungen gleichzeitig gemacht, und die falsche verdächtigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689626</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 02 Apr 2009 00:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::set on Thu, 02 Apr 2009 08:15:17 GMT]]></title><description><![CDATA[<p>ich hab das ausprobiert aber wenn ich #inlcude &quot;Dispatcher.h&quot; lösche läasst sich service nicht mehr compilieren. Dann kennt g++ die klasse Dispatcher nicht und meckert deswegen. Hast vlt noch nen anderen vorschlag?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689683</guid><dc:creator><![CDATA[blups0r]]></dc:creator><pubDate>Thu, 02 Apr 2009 08:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::set on Thu, 02 Apr 2009 09:31:46 GMT]]></title><description><![CDATA[<p>In der Service-Implementierungsdatei (Service.cpp?) noch &quot; <code>#include &quot;Dispatcher.h</code> &quot; hinzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689721</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 02 Apr 2009 09:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::set on Thu, 02 Apr 2009 10:04:26 GMT]]></title><description><![CDATA[<p>Service ist abstrakt - das kann man nicht by value in einen container packen... Muss man die boost pointer container nehmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689729</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 02 Apr 2009 10:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::set on Thu, 02 Apr 2009 16:38:47 GMT]]></title><description><![CDATA[<p>mkay. hab das Problem anders gelöst trotzdem danke für eure hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689995</guid><dc:creator><![CDATA[blups0r]]></dc:creator><pubDate>Thu, 02 Apr 2009 16:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit std::set on Thu, 02 Apr 2009 22:01:50 GMT]]></title><description><![CDATA[<p>Huch!<br />
Das ist ja wirklich ein =0 im Service <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Hatte ich übersehen.</p>
<p>In dem Fall löst man das über boost::shared_ptr&lt;Service&gt; oder ähnlichem.<br />
Natürlich sollte man erstmal verstehen WARUM das wie im Kopfposting zu sehen nicht gehen kann...<br />
Container != Collection und so, ne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1690183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1690183</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 02 Apr 2009 22:01:50 GMT</pubDate></item></channel></rss>