<?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[Arraygröße in Initialisierungsliste festlegen]]></title><description><![CDATA[<p>Servus,</p>
<p>wie kann ich die Größe des Arrays in Zeile 9 dynamisch beim Erzeugen der Klasse mit dem Parameter Size initialisieren?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class BufferClass
{
public:
    const int Size;
    unsigned char buffer[20];
    BufferClass(int tempSize) : Size(tempSize)
    {

    }
};

int main()
{
    BufferClass Buffer(20);
    cout &lt;&lt; &quot;Buffer Size: &quot; &lt;&lt; Buffer.Size &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>so geht es schonmal nicht:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class BufferClass
{
public:
    const int Size;
    unsigned char buffer[Size];
    BufferClass(int tempSize) : Size(tempSize)
    {

    }
};

int main()
{
    BufferClass Buffer(20);
    cout &lt;&lt; &quot;Buffer Size: &quot; &lt;&lt; Buffer.Size &lt;&lt; endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/314952/arraygröße-in-initialisierungsliste-festlegen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 13:56:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314952.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Mar 2013 10:52:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 10:52:11 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>wie kann ich die Größe des Arrays in Zeile 9 dynamisch beim Erzeugen der Klasse mit dem Parameter Size initialisieren?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class BufferClass
{
public:
    const int Size;
    unsigned char buffer[20];
    BufferClass(int tempSize) : Size(tempSize)
    {

    }
};

int main()
{
    BufferClass Buffer(20);
    cout &lt;&lt; &quot;Buffer Size: &quot; &lt;&lt; Buffer.Size &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>so geht es schonmal nicht:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class BufferClass
{
public:
    const int Size;
    unsigned char buffer[Size];
    BufferClass(int tempSize) : Size(tempSize)
    {

    }
};

int main()
{
    BufferClass Buffer(20);
    cout &lt;&lt; &quot;Buffer Size: &quot; &lt;&lt; Buffer.Size &lt;&lt; endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2307856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307856</guid><dc:creator><![CDATA[Johannes T]]></dc:creator><pubDate>Tue, 19 Mar 2013 10:52:11 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 10:54:45 GMT]]></title><description><![CDATA[<p>Dynamische Arrays sind in C++ <code>std::vector&lt;unsigned char&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307858</guid><dc:creator><![CDATA[dynamo&#x27;]]></dc:creator><pubDate>Tue, 19 Mar 2013 10:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 10:55:00 GMT]]></title><description><![CDATA[<p>bei statischen Arrays muss die Größe zur Kompilierzeit feststehen. Nimm generell lieber std::vector - oder in deinem Fall evtl. auch std::string, falls das passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307859</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 19 Mar 2013 10:55:00 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 11:13:16 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten.</p>
<p>Ich möchte den Buffer auf einem AVR Microcontroller einsetzen, deshalb kommt die Verwendung von Vector schonmal nicht in Frage.</p>
<p>Die Größe soll auch schon zur Compilezeit feststehen, mein Codebeispiel war diesbezüglich also nicht ganz korrekt. Im folgenden Beispiel würde der Buffer zur Kompilezeit angelegt, richtig?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class BufferClass
{
public:
    const int Size;
    unsigned char buffer[20];
    BufferClass(int tempSize) : Size(tempSize)
    {

    }
};

BufferClass Buffer(20);

int main()
{
    cout &lt;&lt; &quot;Buffer Size: &quot; &lt;&lt; Buffer.Size &lt;&lt; endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2307867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307867</guid><dc:creator><![CDATA[Johannes T]]></dc:creator><pubDate>Tue, 19 Mar 2013 11:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 11:15:56 GMT]]></title><description><![CDATA[<p>Johannes T schrieb:</p>
<blockquote>
<p>Ich möchte den Buffer auf einem AVR Microcontroller einsetzen, deshalb kommt die Verwendung von Vector schonmal nicht in Frage.</p>
</blockquote>
<p>Wieso genau?</p>
<p>Johannes T schrieb:</p>
<blockquote>
<p>Die Größe soll auch schon zur Compilezeit feststehen, mein Codebeispiel war diesbezüglich also nicht ganz korrekt.</p>
</blockquote>
<p>Dann nimm std::array oder, falls dein Compiler das nicht unterstützt, bau dir selber was äquivalentes:</p>
<pre><code class="language-cpp">template &lt;typename T, size_t N&gt;
class array
{
private:
  T data[N];

public:
  ...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2307868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307868</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 19 Mar 2013 11:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 12:15:46 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antwort, ich werde mir das mit den Templates mal anschauen.<br />
Ich möchte damit einen Framebuffer für ein Grafikdisplay realisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307881</guid><dc:creator><![CDATA[Johannes T]]></dc:creator><pubDate>Tue, 19 Mar 2013 12:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 12:24:31 GMT]]></title><description><![CDATA[<p>In dem Fall wirst du höchstwahrscheinlich was eigenes haben wollen, vermutlich etwas in diese Richtung:</p>
<pre><code class="language-cpp">template &lt;typename T, size_t w, size_t h&gt;
class surface
{
public:
  typedef T value_type;

  static const size_t width = w;
  static const size_t height = h;

private:
  T data[w * h];

public:
  const T&amp; operator()(int x, int y) const { ... }
  T&amp; operator()(int x, int y) { ... }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2307882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307882</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 19 Mar 2013 12:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße in Initialisierungsliste festlegen on Tue, 19 Mar 2013 15:42:27 GMT]]></title><description><![CDATA[<p>Hallo dot,</p>
<p>erstmal vielen dank für den Beispiel. Leider blicke ich noch nicht ganz durch, da sowohl Templates als auch Operatorüberladung völliges Neuland für mich sind.</p>
<p>Vielleicht hier nochmal etwas ausführlicher was ich machen möchte:</p>
<p>Ich will einen Framebuffer für verschiedene Grafik LCDs schreiben. Die Grafikroutinen, die bei allen gleich sind (z.B. String ausgeben), sollen in die Basisklasse GLCD. Die Klasse GLCD_SPI erbt von dieser Klasse und kümmert sich um die Kommunikation auf Hardwareebene. Mein einziges Problem ist jetzt noch, dass die Größe des Displays vom Konstruktoraufruf (Zeile 93) bis zur Arraygröße des Framebuffers durchgereicht wird. Zeile 1-24 ist meine aktuelle Version, die bis auf die &quot;dynamische&quot; Arraygröße funktioniert. Zeile 29-56 war ein Versuch, deinen Vorschlag umzusetzen, aber leider bisher noch ohne Erfolg. Geht das so überhaupt, wie ich mir das wünsche?</p>
<p>Vielleicht hast du noch ein paar Ideen <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="🙂"
    /> und vielleicht könntest du noch kurz ein paar Worte über die beiden Zeilen mit dem überladenen Funktionsoperator (in deinem Code Z.14-15) verlieren. Haben die was mit der Initialisierung zu tun oder sind das set/get Funktionen?</p>
<p>Fragen über Fragen <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>
<pre><code>/*
class Framebuffer
{
public:
    Framebuffer(int Size) : Size(Size)
    {
        return;
    }
	unsigned char getByte(int address)
    {
        return buffer[address];
    }
	bool setByte(int address, unsigned char value)
    {
        if(address&lt;Size)
        {
            buffer[address] = value;
            return 0;
        }
    return 1;
    }

protected:
	int Size;
	unsigned char buffer[768];
};
*/

template &lt;typename T = unsigned char, int tempSize = 0&gt;
class Framebuffer
{
public:

    Framebuffer()
    {
        return;
    }
	unsigned char getByte(int address)
    {
        return buffer[address];
    }
	bool setByte(int address, unsigned char value)
    {
        if(address&lt;Size)
        {
            buffer[address] = value;
            return 0;
        }
    return 1;
    }

protected:
	static const int Size = tempSize;
	T buffer[tempSize];

};

class GLCD
{
public:

	GLCD(int xSize, int ySize) : xSize(xSize), ySize(ySize), Buffer(xSize*ySize)
    {
        return;
    }
    void refresh();
	void String(int x, int y, char* string)
	{
        return;
	}

protected:
	int xSize;
	int ySize;
    Framebuffer Buffer;
};

class GLCD_SPI : public GLCD
{
public:
    GLCD_SPI(int xSize, int ySize) : GLCD(xSize,ySize)
    {
        return;
    }
    void refresh()
    {
        return;
    }
};

GLCD_SPI Display(96,64);

int main()
{
    // ....
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2307973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307973</guid><dc:creator><![CDATA[Johannes T]]></dc:creator><pubDate>Tue, 19 Mar 2013 15:42:27 GMT</pubDate></item></channel></rss>