<?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[circular buffer und iterator]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich habe mir meinen eigenen circular buffer auf basis von boost gebastelt, aber irgendwo stimmt da wohl was nicht. ich gebe zu, es sind meine ersten versuche auf dem gebiet der iteratoren :).</p>
<p>Hier mein Testcode:</p>
<pre><code>CircularBuffer&lt;int&gt; test(10);
            test.add(1);
            test.add(2);
            test.add(3);

            CircularBuffer&lt;int&gt;::iterator_type it = test.begin();
            while(it != test.end()){
                std::cout&lt;&lt;it&lt;&lt;endl;
                it++;
            }
</code></pre>
<p>Mein Buffer sieht gekürzt so aus:</p>
<pre><code class="language-cpp">#pragma once

#ifndef CIRCULARBUFFER_H
#define	CIRCULARBUFFER_H

#include &lt;boost/circular_buffer.hpp&gt;

namespace A {
    namespace B {

        template &lt;typename T&gt;
        class CircularBuffer {
        public:

            CircularBuffer(size_t size);
            CircularBuffer(const CircularBuffer &amp; orig);
            virtual ~CircularBuffer();

            void add(const T &amp; t);

        protected:

            typedef boost::circular_buffer&lt;T&gt; CBuffer;
            CBuffer buffer;

        public:

            template &lt;typename PointerType&gt;
            class iterator : public CBuffer::iterator {
            };

            typedef iterator&lt;CBuffer*&gt; iterator_type;
            typedef iterator&lt;const CBuffer*&gt; const_iterator_type;

            iterator_type begin();
            iterator_type end();
            const_iterator_type begin() const;
            const_iterator_type end() const;

        };

        template &lt;typename T&gt;
        std::ostream operator&lt;&lt;(std::ostream &amp; s, typename CircularBuffer&lt;T&gt;::iterator_type it){
            return s&lt;&lt;*it;
        }

        template &lt;typename T&gt;
        CircularBuffer&lt;T&gt;::CircularBuffer(size_t size) : buffer(size) {
        }

        template &lt;typename T&gt;
        CircularBuffer&lt;T&gt;::CircularBuffer(const CircularBuffer &amp; orig) : buffer(orig.buffer) {
        }

        template &lt;typename T&gt;
        CircularBuffer&lt;T&gt;::~CircularBuffer() {
        }

        template &lt;typename T&gt;
        void
        CircularBuffer&lt;T&gt;::add(const T &amp; t) {
            buffer.push_back(t);
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::iterator_type
        CircularBuffer&lt;T&gt;::begin() {
            return buffer.begin();
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::const_iterator_type
        CircularBuffer&lt;T&gt;::begin() const {
            return buffer.begin();
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::iterator_type
        CircularBuffer&lt;T&gt;::end() {
            return buffer.end();
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::const_iterator_type
        CircularBuffer&lt;T&gt;::end() const {
            return buffer.end();
        }
    }
}

#endif	/* CIRCULARBUFFER_H */
</code></pre>
<p>Leider bekomme ich folgende Fehlermeldung, welche mir so richtig nix sagt:</p>
<pre><code class="language-cpp">In member function ‘typename A::B::CircularBuffer&lt;T&gt;::iterator_type A::B::CircularBuffer&lt;T&gt;::begin() [with T = int]’:
A.cc:238:   instantiated from here
CircularBuffer.h:307: error: conversion from ‘boost::cb_details::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;, boost::cb_details::nonconst_traits&lt;std::allocator&lt;int&gt; &gt; &gt;’ to non-scalar type ‘A::B::CircularBuffer&lt;int&gt;::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;*&gt;’ requested
CircularBuffer.h: In member function ‘typename A::B::CircularBuffer&lt;T&gt;::iterator_type A::B::CircularBuffer&lt;T&gt;::end() [with T = int]’:
A.cc:239:   instantiated from here
CircularBuffer.h:331: error: conversion from ‘boost::cb_details::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;, boost::cb_details::nonconst_traits&lt;std::allocator&lt;int&gt; &gt; &gt;’ to non-scalar type ‘A::B::CircularBuffer&lt;int&gt;::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;*&gt;’ requested
</code></pre>
<p>Kann mir jemand weiterhelfen???</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310355/circular-buffer-und-iterator</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 19:21:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310355.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Nov 2012 13:47:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to circular buffer und iterator on Fri, 09 Nov 2012 13:47:40 GMT]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich habe mir meinen eigenen circular buffer auf basis von boost gebastelt, aber irgendwo stimmt da wohl was nicht. ich gebe zu, es sind meine ersten versuche auf dem gebiet der iteratoren :).</p>
<p>Hier mein Testcode:</p>
<pre><code>CircularBuffer&lt;int&gt; test(10);
            test.add(1);
            test.add(2);
            test.add(3);

            CircularBuffer&lt;int&gt;::iterator_type it = test.begin();
            while(it != test.end()){
                std::cout&lt;&lt;it&lt;&lt;endl;
                it++;
            }
</code></pre>
<p>Mein Buffer sieht gekürzt so aus:</p>
<pre><code class="language-cpp">#pragma once

#ifndef CIRCULARBUFFER_H
#define	CIRCULARBUFFER_H

#include &lt;boost/circular_buffer.hpp&gt;

namespace A {
    namespace B {

        template &lt;typename T&gt;
        class CircularBuffer {
        public:

            CircularBuffer(size_t size);
            CircularBuffer(const CircularBuffer &amp; orig);
            virtual ~CircularBuffer();

            void add(const T &amp; t);

        protected:

            typedef boost::circular_buffer&lt;T&gt; CBuffer;
            CBuffer buffer;

        public:

            template &lt;typename PointerType&gt;
            class iterator : public CBuffer::iterator {
            };

            typedef iterator&lt;CBuffer*&gt; iterator_type;
            typedef iterator&lt;const CBuffer*&gt; const_iterator_type;

            iterator_type begin();
            iterator_type end();
            const_iterator_type begin() const;
            const_iterator_type end() const;

        };

        template &lt;typename T&gt;
        std::ostream operator&lt;&lt;(std::ostream &amp; s, typename CircularBuffer&lt;T&gt;::iterator_type it){
            return s&lt;&lt;*it;
        }

        template &lt;typename T&gt;
        CircularBuffer&lt;T&gt;::CircularBuffer(size_t size) : buffer(size) {
        }

        template &lt;typename T&gt;
        CircularBuffer&lt;T&gt;::CircularBuffer(const CircularBuffer &amp; orig) : buffer(orig.buffer) {
        }

        template &lt;typename T&gt;
        CircularBuffer&lt;T&gt;::~CircularBuffer() {
        }

        template &lt;typename T&gt;
        void
        CircularBuffer&lt;T&gt;::add(const T &amp; t) {
            buffer.push_back(t);
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::iterator_type
        CircularBuffer&lt;T&gt;::begin() {
            return buffer.begin();
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::const_iterator_type
        CircularBuffer&lt;T&gt;::begin() const {
            return buffer.begin();
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::iterator_type
        CircularBuffer&lt;T&gt;::end() {
            return buffer.end();
        }

        template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::const_iterator_type
        CircularBuffer&lt;T&gt;::end() const {
            return buffer.end();
        }
    }
}

#endif	/* CIRCULARBUFFER_H */
</code></pre>
<p>Leider bekomme ich folgende Fehlermeldung, welche mir so richtig nix sagt:</p>
<pre><code class="language-cpp">In member function ‘typename A::B::CircularBuffer&lt;T&gt;::iterator_type A::B::CircularBuffer&lt;T&gt;::begin() [with T = int]’:
A.cc:238:   instantiated from here
CircularBuffer.h:307: error: conversion from ‘boost::cb_details::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;, boost::cb_details::nonconst_traits&lt;std::allocator&lt;int&gt; &gt; &gt;’ to non-scalar type ‘A::B::CircularBuffer&lt;int&gt;::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;*&gt;’ requested
CircularBuffer.h: In member function ‘typename A::B::CircularBuffer&lt;T&gt;::iterator_type A::B::CircularBuffer&lt;T&gt;::end() [with T = int]’:
A.cc:239:   instantiated from here
CircularBuffer.h:331: error: conversion from ‘boost::cb_details::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;, boost::cb_details::nonconst_traits&lt;std::allocator&lt;int&gt; &gt; &gt;’ to non-scalar type ‘A::B::CircularBuffer&lt;int&gt;::iterator&lt;boost::circular_buffer&lt;int, std::allocator&lt;int&gt; &gt;*&gt;’ requested
</code></pre>
<p>Kann mir jemand weiterhelfen???</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269300</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Fri, 09 Nov 2012 13:47:40 GMT</pubDate></item><item><title><![CDATA[Reply to circular buffer und iterator on Fri, 09 Nov 2012 18:08:07 GMT]]></title><description><![CDATA[<p>Warum dieser Mummenschanz mit den Iteratoren?</p>
<p>sven_ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class CircularBuffer {
  //....
  public:

  template &lt;typename PointerType&gt;
  class iterator : public CBuffer::iterator {
  };

  typedef iterator&lt;CBuffer*&gt; iterator_type;
  typedef iterator&lt;const CBuffer*&gt; const_iterator_type;
  //...
}
</code></pre>
</blockquote>
<p>Anstatt das näherliegende</p>
<pre><code class="language-cpp">typedef typename CBuffer::iterator iterator_type;
  typedef typename CBuffer::const_iterator const_iterator_type;
</code></pre>
<p>?</p>
<p>PS: ist jemand der Moderatoren so nett, die Fehlermeldung umzubrechen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2269395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2269395</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Fri, 09 Nov 2012 18:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to circular buffer und iterator on Mon, 12 Nov 2012 10:24:17 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>erst mal vielen dank für die hilfe. also das mit den iteratoren habe ich wie gesagt so gemacht, weil ich es nicht anders wußte. nun hab ich die klasse gegen deine types ersetzt, und ich komme weiter. allerdings bricht er ab, wenn ich ein element per erase aus den buffer nehmen will. mein code dazu ist nur:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::iterator_type
        CircularBuffer&lt;T&gt;::erase(iterator_type pos){
            buffer.erase(pos);
        }
</code></pre>
<p>Konkret kommt ein SegFault aus den internen Boost Methoden (debug_iterator_base::next()). Was mach ich falsch???</p>
<p>Schon mal danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270051</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Mon, 12 Nov 2012 10:24:17 GMT</pubDate></item><item><title><![CDATA[Reply to circular buffer und iterator on Mon, 12 Nov 2012 10:38:34 GMT]]></title><description><![CDATA[<p>sven_ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
        typename CircularBuffer&lt;T&gt;::iterator_type
        CircularBuffer&lt;T&gt;::erase(iterator_type pos){
            buffer.erase(pos);
        }
</code></pre>
<p>Konkret kommt ein SegFault aus den internen Boost Methoden (debug_iterator_base::next()). Was mach ich falsch???</p>
<p>Schon mal danke.</p>
</blockquote>
<p>Sollte die Methode nicht was zurückgeben?</p>
<p>Im Compiler auf jeden Fall mehr Warnungen aktivieren... <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270053</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Mon, 12 Nov 2012 10:38:34 GMT</pubDate></item><item><title><![CDATA[Reply to circular buffer und iterator on Mon, 12 Nov 2012 10:43:20 GMT]]></title><description><![CDATA[<p>hallo nochmal,</p>
<p>ich merke gerade, es liegt gar nicht am earse, sondern am 2. aufruf von it.begin(). also ist doch wohl irgendwie noch mein iterator falsch. mh. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270054</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Mon, 12 Nov 2012 10:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to circular buffer und iterator on Mon, 12 Nov 2012 13:25:42 GMT]]></title><description><![CDATA[<p>hallo nochmal,</p>
<p>stimmt! Da fehlte was. Super. Sauber neubauen und drüber schauen hilft vielleicht. Ich danke dir. <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="🙂"
    /></p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2270099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2270099</guid><dc:creator><![CDATA[sven_]]></dc:creator><pubDate>Mon, 12 Nov 2012 13:25:42 GMT</pubDate></item></channel></rss>