<?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 bei Operatorüberladung [] und =]]></title><description><![CDATA[<p>Hallo, ich bin neu hier bei euch und hätte mal eine kleine Frage. Es geht um Operator Überladung.</p>
<p>Ich habe an einen AVR Xmega zusätzlichen SRAM(512kb) angeschlossen. Dummerweise kann der avr-g++ diesen nicht verwalten. Also habe ich mir eine kleine Klasse geschrieben mit der ich mir zumindest schonmal &quot;Arrays&quot; dynamisch im externen RAM anlegen kann. Das funktioniert soweit auch schonmal ganz gut. Jetzt möchte nur noch, mit Hilfe von Operatorüberladung, auf die einzelnen Elemente wie bei einem Array zugreifen.</p>
<p>Derzeit sieht das ganze bei mir so aus:</p>
<pre><code>ExtRAM* test1 = new ExtRAM(100);

test1-&gt;writeByte(5, 0xAA);

uint8_t value5;
value5 = test1-&gt;readByte(5);
</code></pre>
<p>Ich würde das ganze aber gerne so verwenden:</p>
<pre><code>ExtRAM* test1 = new ExtRAM(100);

test1[5] = 0xAA

uint8_t value5;
value5 = test[5];
</code></pre>
<p>Probiert habe ich das ganze so (Auszug):</p>
<pre><code>class ExtRAM {
   public:
      uint8_t operator[](uint32_t const index);
}

uint8_t ExtRAM::operator[](uint32_t const index) {
   return this-&gt;readByte(index);
}

int main(void) {
   ExtRAM* test1 = new ExtRAM(100);
   uint8_t value5;
   value5 = test1[5];
}
</code></pre>
<p>Nur leider funktioniert das nicht. Der Compiler sagt mir<br />
<em><strong>Error 11 cannot convert 'ExtRAM' to 'uint8_t {aka unsigned char}' in initialization</strong></em></p>
<p>Und wie kann ich es anstellen das, dass auch bei einer Zuweisung funktioniert</p>
<pre><code>test[5] = 0xAA
</code></pre>
<p>Achja: die datentypen uint8_t und uint32_t gehören auf den AVR's zu den Standartdatentypen.</p>
<p>Ich hoffe das ihr mir helfen könnt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319021/problem-bei-operatorüberladung-und</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 13:36:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319021.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Aug 2013 11:45:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 04 Aug 2013 11:45:10 GMT]]></title><description><![CDATA[<p>Hallo, ich bin neu hier bei euch und hätte mal eine kleine Frage. Es geht um Operator Überladung.</p>
<p>Ich habe an einen AVR Xmega zusätzlichen SRAM(512kb) angeschlossen. Dummerweise kann der avr-g++ diesen nicht verwalten. Also habe ich mir eine kleine Klasse geschrieben mit der ich mir zumindest schonmal &quot;Arrays&quot; dynamisch im externen RAM anlegen kann. Das funktioniert soweit auch schonmal ganz gut. Jetzt möchte nur noch, mit Hilfe von Operatorüberladung, auf die einzelnen Elemente wie bei einem Array zugreifen.</p>
<p>Derzeit sieht das ganze bei mir so aus:</p>
<pre><code>ExtRAM* test1 = new ExtRAM(100);

test1-&gt;writeByte(5, 0xAA);

uint8_t value5;
value5 = test1-&gt;readByte(5);
</code></pre>
<p>Ich würde das ganze aber gerne so verwenden:</p>
<pre><code>ExtRAM* test1 = new ExtRAM(100);

test1[5] = 0xAA

uint8_t value5;
value5 = test[5];
</code></pre>
<p>Probiert habe ich das ganze so (Auszug):</p>
<pre><code>class ExtRAM {
   public:
      uint8_t operator[](uint32_t const index);
}

uint8_t ExtRAM::operator[](uint32_t const index) {
   return this-&gt;readByte(index);
}

int main(void) {
   ExtRAM* test1 = new ExtRAM(100);
   uint8_t value5;
   value5 = test1[5];
}
</code></pre>
<p>Nur leider funktioniert das nicht. Der Compiler sagt mir<br />
<em><strong>Error 11 cannot convert 'ExtRAM' to 'uint8_t {aka unsigned char}' in initialization</strong></em></p>
<p>Und wie kann ich es anstellen das, dass auch bei einer Zuweisung funktioniert</p>
<pre><code>test[5] = 0xAA
</code></pre>
<p>Achja: die datentypen uint8_t und uint32_t gehören auf den AVR's zu den Standartdatentypen.</p>
<p>Ich hoffe das ihr mir helfen könnt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343322</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Sun, 04 Aug 2013 11:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 04 Aug 2013 11:57:16 GMT]]></title><description><![CDATA[<p>Warum legst du test1 mit new an? Dann muss es (*test1)[5] heissen.</p>
<p>Zum Lesen kannst du den Operator verwenden, zum Schreiben müsste er aber eine Referenz liefern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343323</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 04 Aug 2013 11:57:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 04 Aug 2013 12:12:58 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Warum legst du test1 mit new an? Dann muss es (*test1)[5] heissen.</p>
</blockquote>
<p>Danke, manchmal bin ich echt zu blöd. Klar muss ich (*test1)[5] so drauf zugreifen. Ist ja ein Zeiger. Und natürlich macht es in meinen einfachen Beispiel keinen Sinn test1 mit new anzulegen. Aber später schon ;).</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Zum Lesen kannst du den Operator verwenden, zum Schreiben müsste er aber eine Referenz liefern.</p>
</blockquote>
<p>Und das kann ich nicht. Ist ja ein einfaches Byte was ich aus meinem externen RAM hole.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343328</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Sun, 04 Aug 2013 12:12:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 04 Aug 2013 13:26:26 GMT]]></title><description><![CDATA[<p>Neo87 schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Zum Lesen kannst du den Operator verwenden, zum Schreiben müsste er aber eine Referenz liefern.</p>
</blockquote>
<p>Und das kann ich nicht. Ist ja ein einfaches Byte was ich aus meinem externen RAM hole.</p>
</blockquote>
<p>Wieso soll man ein einfaches Byte nicht per Referenz übergeben können?<br />
Meinst du, dass du eine komische Funktion benutzen musst um an den externen RAM ranzukommen und deshalb dieses Byte keine Adresse hat, ähnlich zu Bytes auf der Festplatte?<br />
Dann kann vielleicht ein Wrapper helfen:</p>
<pre><code>struct ByteWrapper{
    operator uin8(){ //zum Lesen, damit sich ein ByteWrapper wie ein uint8 verhält
        return byte;
    }
    ByteWrapper &amp;operator= (uint8 b){ //damit du ein ByteWrapper wie ein normales uint8 beschreiben kannst
        byte = b;
        writeByte(adresse, byte);
        return *this;
    }
    ByteWrapper(unsigned int adresse){
        byte = readByte(adresse);
    }
private:
    uint8 byte;
    unsigned int adresse; //im externen RAM
};

struct ExternerRam{
    ByteWrapper operator[] (unsigned int adresse){
        return ByteWrapper(adresse);
    }
};

//zu benutzen:
ExternerRam eram;
void tuwas(uint8);
tuwas(eram[42]); //ließt den externen RAM
eram[5] = 17; //schreibt in den externen RAM
</code></pre>
<p>Es gibt da noch das Problem, dass die letzte Zeile von Adresse 5 liest, was Quatsch ist. Das kriegt man aber auch noch irgendwie weg.</p>
<p>Ich hoffe mal meine Glaskugel lag nicht völlig falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343351</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Sun, 04 Aug 2013 13:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Thu, 15 Aug 2013 16:49:36 GMT]]></title><description><![CDATA[<p>sry, dass ich mich erst jetzt melde, ich hatte das ganze schon ad acta gelegt. Aber ja, deine Glaskugel hat vollkommen recht. Da der avr-g++ leider nur 16bit Pointer verwendet ist er nicht in der Lage die externen 512kB anzusprechen.<br />
Also komme ich nur via Inline Assambler an den externen RAM.</p>
<p>Nen Wrapper zu verwenden ist da natürlich ne super Idee. Wäre ich alleine nie drauf gekommen.<br />
Nur leider musste ich mein Projekt auf Grund von Platzmangel ein wenig umstellen, so das ich von solchem Luxus zurzeit nur noch träumen kann.</p>
<p>Aber trotzdem danke für den Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346133</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Thu, 15 Aug 2013 16:49:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Thu, 15 Aug 2013 18:34:53 GMT]]></title><description><![CDATA[<p>Neo87 schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Warum legst du test1 mit new an? Dann muss es (*test1)[5] heissen.</p>
</blockquote>
<p>Und natürlich macht es in meinen einfachen Beispiel keinen Sinn test1 mit new anzulegen. Aber später schon ;)..</p>
</blockquote>
<p>Ähm, nur um was klar zu stellen:<br />
Es macht nie Sinn etwas mit new[] anzulegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346164</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 15 Aug 2013 18:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Thu, 15 Aug 2013 18:37:33 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Es macht nie Sinn etwas mit new[] anzulegen.</p>
</blockquote>
<p>Es macht in einem µC auch nie Sinn, new[] indirekt (z.B. durch std::vector) zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346166</guid><dc:creator><![CDATA[mükro]]></dc:creator><pubDate>Thu, 15 Aug 2013 18:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Fri, 16 Aug 2013 07:21:59 GMT]]></title><description><![CDATA[<p>mükro schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Es macht nie Sinn etwas mit new[] anzulegen.</p>
</blockquote>
<p>Es macht in einem µC auch nie Sinn, new[] indirekt (z.B. durch std::vector) zu verwenden.</p>
</blockquote>
<p>natürlich macht kapselung keinen sinn! wo sind wir denn hier? bei c++?????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346248</guid><dc:creator><![CDATA[qwertzuiop]]></dc:creator><pubDate>Fri, 16 Aug 2013 07:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Fri, 16 Aug 2013 08:14:40 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Es macht nie Sinn etwas mit new[] anzulegen.</p>
</blockquote>
<p>Ja, nee ist klar! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346266</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 16 Aug 2013 08:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Fri, 16 Aug 2013 08:24:08 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Es macht nie Sinn etwas mit new[] anzulegen.</p>
</blockquote>
<p>Ja, nee ist klar! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>dann nenn mir einen einzigen fall, in welchem new[] einem stl-container vorzuziehen ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346268</guid><dc:creator><![CDATA[qwertzuiop]]></dc:creator><pubDate>Fri, 16 Aug 2013 08:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Fri, 16 Aug 2013 08:26:43 GMT]]></title><description><![CDATA[<p>Beim Backend eines selbstgeschriebenen Allokators. <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/2346269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346269</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 16 Aug 2013 08:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Fri, 16 Aug 2013 08:34:14 GMT]]></title><description><![CDATA[<p>Schreib mal ein Beispiel wo man bereits einen Konstruktoraufruf braucht und nicht nur rohen Speicher benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346275</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 16 Aug 2013 08:34:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Fri, 16 Aug 2013 09:02:00 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Beim Backend eines selbstgeschriebenen Allokators. <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>
</blockquote>
<p>Dort tust du aber nicht new[] verwenden, sondern operator new()</p>
<p>PS:<br />
ich gebe Nathan recht: new[] braucht man nicht.</p>
<p>(und jede Regel hat eine Ausnahme - aber um ehrlich zu sein, ich habe new[] noch nie in production Code verwendet).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346282</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 16 Aug 2013 09:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sat, 17 Aug 2013 14:26:15 GMT]]></title><description><![CDATA[<p>Wer hat denn hier von new[] gesprochen?</p>
<p>Ich habe doch ledigtlich ein Objekt mit new angelegt. Dieses Objekt enthält nichts weiter als eine Speicherbereich auf meinem externen RAM(da ich diesen nur per inline-Assambler ansprechen kann). Jetzt wollte ich doch ledigtlich auf die einzeilnen Elemente per objekt[index] zugreifen, statt per objekt-&gt;readbyte(index).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346650</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Sat, 17 Aug 2013 14:26:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sat, 17 Aug 2013 15:54:33 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Es macht nie Sinn etwas mit new[] anzulegen.</p>
</blockquote>
<p>Ja, nee ist klar! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>So pauschal meinte er das nicht. Es geht um Code, in dem Bausteine um <code>new[]</code> zu umgehen bereits unmittelbar vorhanden sind. Einen STL-Container in einem Allokator zu verwenden ist sinnfrei, da dieser den allozierten Speicher nicht besitzt. Aber sobald STL-Container definiert sind, also Konstrukte die (im Sinne von RAII) den Speicher besitzen, ist rohe Speicherallozierung ein Tabu.</p>
<blockquote>
<p>Dort tust du aber nicht new[] verwenden, sondern operator new()</p>
</blockquote>
<p>Shade, dieser Scherzkeks. <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><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Es ist nämlich <code>::operator new()</code> . ~Zumindest beim Standardallokator.~</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346666</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 17 Aug 2013 15:54:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sat, 17 Aug 2013 23:08:15 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>[Sonntagspredigt]</p>
</blockquote>
<p>Wie immer ignorieren wir fleissig mindestens einen nebensächlichen Fakt. Hier um einen Microcontroller mit 512kb(!) RAM handelt. Auf Microcontrollern verwendet man besser keine C++-Standardbibliothek (wobei sie oft auch gar nicht vorhanden ist. Muss sie auch nicht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346738</guid><dc:creator><![CDATA[facepalm]]></dc:creator><pubDate>Sat, 17 Aug 2013 23:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 07:31:57 GMT]]></title><description><![CDATA[<p>facepalm schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>[Sonntagspredigt]</p>
</blockquote>
<p>Wie immer ignorieren wir fleissig mindestens einen nebensächlichen Fakt. Hier um einen Microcontroller mit 512kb(!) RAM handelt. Auf Microcontrollern verwendet man besser keine C++-Standardbibliothek (wobei sie oft auch gar nicht vorhanden ist. Muss sie auch nicht)</p>
</blockquote>
<p>Habe ich gesagt, dass man immer die STL verwenden soll? Ich habe gesagt, man soll nie <code>new[]</code> roh verwenden! Auf einem Mikrokontroller wird man auch irgendwie RAII nehmen - wenn man das nicht tut, dann kann man gleich zu C wechseln.</p>
<p>P.S.: Mein Mikrokontroller hat 2kB RAM. 512 sind ziemlich viel. Man sieht, du hast Erfahrung mit solchen Zahlen (!). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346755</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 18 Aug 2013 07:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 09:15:39 GMT]]></title><description><![CDATA[<p>facepalm schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>[Sonntagspredigt]</p>
</blockquote>
<p>Wie immer ignorieren wir fleissig mindestens einen nebensächlichen Fakt. Hier um einen Microcontroller mit 512kb(!) RAM handelt.</p>
</blockquote>
<p>Nicht ganz <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> der eigentliche Mikrocontroller hat nur 16kb RAM, ich habe aber 512kb externen SRAM am EBI hängen!<br />
Wie schon geschrieben kann der AVR-G++ den aber nicht verwalten, dar er nur mit 16bit Pointern arbeitet. Ich muss mich also um die 512kb von Hand kümmern und kann dort nur &quot;Werte&quot; ablgegen und keine Objekte erzeugen (Jedenfalls wüsste ich nicht wie?).<br />
Deswegen meine ExtRAM-Klasse, diese legt im internen RAM ein Objekt an welches die Speicheradresse zum externen RAM beinhaltet. Dabei organiesiere ich meinen externen RAM wie einen Heap. Ich kann also Speicher reservieren und wieder freigeben. Ich wollte jetzt ledigtlich darauf wie auf ein Array, per [index], zugreifen.</p>
<p>P.S. Und man kann C++ sehr wohl sinnvoll auf einem Mikrocontroller einsetzten. Gerade bei größeren Projekten wie meinem. Touchscreen, Bluetooth, 96 LEDs mit 12bit-PWM, 4x32Mbit-Flash, diverse Sensoren.<br />
Gerade bei der GUI möchte ich nicht auf den Komfort verzeichten mal eben per new UIButton mir einen Button zu erzeugen <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/2346773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346773</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Sun, 18 Aug 2013 09:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 09:59:53 GMT]]></title><description><![CDATA[<blockquote>
<p>Gerade bei der GUI möchte ich nicht auf den Komfort verzeichten mal eben per new UIButton mir einen Button zu erzeugen</p>
</blockquote>
<p>Ja, aber ich bete dafür, dass du Smart-Pointer verwendest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346775</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 18 Aug 2013 09:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 11:04:29 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Ja, aber ich bete dafür, dass du Smart-Pointer verwendest.</p>
</blockquote>
<p>Nein, warum sollte ich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346781</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Sun, 18 Aug 2013 11:04:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 11:08:04 GMT]]></title><description><![CDATA[<p>Neo87 schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Ja, aber ich bete dafür, dass du Smart-Pointer verwendest.</p>
</blockquote>
<p>Nein, warum sollte ich?</p>
</blockquote>
<p>Naja, wenn du immer weiter mit new allozierst, ohne den zuvor angeforderten Speicher freizugeben, dann <strong>frage</strong> ich mich, ob dir der Speicher nicht irgendwann ausgeht.<br />
Der Controller kann schließlich nicht ahnen, wann du den Speicher nicht mehr benötigst und ihn automatisch freigeben. Oder doch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346782</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 18 Aug 2013 11:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 11:23:46 GMT]]></title><description><![CDATA[<p>Naja, also ich mache das so, dass ich jedem UIElement(Button, Slider, Image,...) ein Window zuweise. Das Window enthält dabei alle Referenzen auf die einzelnen UIElemente. Lösche ich jetzt das Window kümmert es sich auch darum das alle ihm zugewiesenen Elemente wieder freigegeben werden.<br />
Das window kümmert sich außerdem um das Zeichnen auf dem Display und ruft die entsprechenden Callback-routinen auf wenn ein &quot;Touch&quot; erkannt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346787</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Sun, 18 Aug 2013 11:23:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 11:33:04 GMT]]></title><description><![CDATA[<blockquote>
<p>Lösche ich jetzt das Window kümmert es sich auch darum das alle ihm zugewiesenen Elemente wieder freigegeben werden.</p>
</blockquote>
<p>Das ist aber genau das was ich predige: RAII. Im Destruktor wirst du dann alle Elemente im Besitz zerstören. Das könnte man noch flexibler gestalten, aber so hast du ja schon die prinzipiellen Vorteile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346788</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 18 Aug 2013 11:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Operatorüberladung [] und = on Sun, 18 Aug 2013 11:52:48 GMT]]></title><description><![CDATA[<p>Achso, mir war die Begrifflichkeit nicht bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2346793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2346793</guid><dc:creator><![CDATA[Neo87]]></dc:creator><pubDate>Sun, 18 Aug 2013 11:52:48 GMT</pubDate></item></channel></rss>