<?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[Array dynamischer Größe in Klasse einbauen?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe hier eine Klasse welche ich zum Auslesen eines Dateityps erstelle. Nun enthält eine solche Datei eine vorher unbestimmte Anzahl von Daten die ich gerne in einem Array speichern möchte. Da die Anzahl von 200 bis 30000 variieren kann möchte ich das Array dynamisch zur Laufzeit erzeugen. Dazu lese ich aus der Datei die Anzahl der Daten aus und habe somit die benötigte Größe, allerdings bin ich irgendwie verpeilt und weiss nicht, wie ich meine Idee umsetzen kann. Problem ist, ein Array in der Klassenbeschreibung dynamisch anzulegen und ihm wirklich erst zur Laufzeit, nach dem Konstruktor, eine Größe zuzuweisen. Ich denke so etwas geht irgendwie, aber ich habe bisher keine Beispiele gefunden. Kann mir jemand weiterhelfen?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161460/array-dynamischer-größe-in-klasse-einbauen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 19:59:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161460.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Oct 2006 18:11:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Fri, 06 Oct 2006 18:11:25 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe hier eine Klasse welche ich zum Auslesen eines Dateityps erstelle. Nun enthält eine solche Datei eine vorher unbestimmte Anzahl von Daten die ich gerne in einem Array speichern möchte. Da die Anzahl von 200 bis 30000 variieren kann möchte ich das Array dynamisch zur Laufzeit erzeugen. Dazu lese ich aus der Datei die Anzahl der Daten aus und habe somit die benötigte Größe, allerdings bin ich irgendwie verpeilt und weiss nicht, wie ich meine Idee umsetzen kann. Problem ist, ein Array in der Klassenbeschreibung dynamisch anzulegen und ihm wirklich erst zur Laufzeit, nach dem Konstruktor, eine Größe zuzuweisen. Ich denke so etwas geht irgendwie, aber ich habe bisher keine Beispiele gefunden. Kann mir jemand weiterhelfen?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150771</guid><dc:creator><![CDATA[dercmdr]]></dc:creator><pubDate>Fri, 06 Oct 2006 18:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Fri, 06 Oct 2006 18:15:34 GMT]]></title><description><![CDATA[<p>Du solltest auf jeden Fall einen STL-Container benutzen. Im einfachsten Fall vielleicht std::vector&lt; DatenTyp &gt;. Da musst Du Dich nicht um die Anzahl der Daten kümmern.<br />
Wie ist das Format Deiner Datei und von welchem Typ ist ein einzelnes Datum in Deinem Code?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150775</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 06 Oct 2006 18:15:34 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Fri, 06 Oct 2006 18:27:43 GMT]]></title><description><![CDATA[<p>In der Klasse würd ich einen Zeiger auf das anzulegende Array definieren (z.B. int* Ptr;)<br />
und erstmal in der Initialisierungsliste mit NULL belegen.<br />
Zu gegebener Zeit dann diesen Zeiger mit Ptr = new int[Anzahl]; initialisieren.<br />
Im Destruktor dann mit delete[Ptr]; Speicher wieder freigeben.<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150785</guid><dc:creator><![CDATA[Gerie]]></dc:creator><pubDate>Fri, 06 Oct 2006 18:27:43 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Fri, 06 Oct 2006 18:47:35 GMT]]></title><description><![CDATA[<p>Es hanelt sich um eine Datei im JEDEC Format. Bei den Daten handelt es sich um eine 1 oder 0 mit einer zugehörigen Adresse. Dafür habe ich mir einen struct erstellt, von dem ich momentan ein Array fester Größe erzeuge. Das wollte ich gerne dynamisch machen.<br />
Mit den Containerformaten habe ich noch nie gearbeitet, werde mir das mal anschauen. Die Idee mit dem Zeiger hätte mir ja auch selbst kommen können. Nun ist die Frage, was besser ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150792</guid><dc:creator><![CDATA[dercmdr]]></dc:creator><pubDate>Fri, 06 Oct 2006 18:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Fri, 06 Oct 2006 20:31:44 GMT]]></title><description><![CDATA[<p>Unter JEDEC-Format habe ich dies gefunden:</p>
<pre><code>L0512 11111111110111111111111111111111*
L0768 11111111110111101111111111111111*
C0000*
</code></pre>
<p>also mehrere Speicherbereiche mit der Bit-Belegung für ein Eprom oder so. Dann mache Dir eine Struktur Memory, die so einen Speicherblock aufnimmt und versehe die Struktur mit einem Input-operator, so dass Du sie aus einem std::istream lesen kannst. Etwa so</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;

struct Memory
{
    friend std::istream&amp; operator&gt;&gt;( std::istream&amp; in, Memory&amp; mem )
    {
        long adresse;
        if( in &gt;&gt; std::hex &gt;&gt; adresse )
        {
            char fuse;
            std::vector&lt; char &gt; fuses;
            while( in &gt;&gt; fuse &amp;&amp; (fuse == '0' || fuse == '1') )
                fuses.push_back( fuse );
            if( fuse == '*' )   // Ende richtig gelesen
            {
                // alles iO; Daten nach 'mem' übernehmen
                mem.m_adresse = adresse;
                mem.m_fuses.swap( fuses );
            }
            else
                in.setstate( std::ios_base::failbit );  // Fehler-Bit setzen
        }
        return in;
    }

    long    m_adresse;
    std::vector&lt; char &gt; m_fuses;
};

int main () // Testprogramm für Memory lesen
{
    using namespace std;
    ifstream in(&quot;input.txt&quot;);
    Memory block;
    char L;
    if( in &gt;&gt; L &gt;&gt; block )
        cout &lt;&lt; &quot;Block richtig gelesen; Anzahl fuses = &quot; &lt;&lt; block.m_fuses.size() &lt;&lt; endl;
    return 0 ;
}
</code></pre>
<p>Wenn das funktioniert baue Dir eine Klasse Jedec, die mehrere solcher Memory-Blöcke enthält.</p>
<pre><code class="language-cpp">class Jedec
{
public:
    friend std::istream&amp; operator&gt;&gt;( std::istream&amp; in, Jedec&amp; mem );
private:
    std::vector&lt; Memory &gt; m_blocks;
};
</code></pre>
<p>Ist es das, was Du brauchst?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150835</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 06 Oct 2006 20:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Sat, 07 Oct 2006 10:07:37 GMT]]></title><description><![CDATA[<p>Hallo Werner,</p>
<p>vielen Dank für das ausführliche Beispiel. Ich muss leider sagen, dass ich das noch nicht alles verstehe. Ich hatte zwar im Prinzip dieselbe Idee, habe das aber anders angegangen. Werde versuchen deinen Code zu verstehen und etwas davon zu nutzen.<br />
Wenn ich das soweit richtig sehe überlädst du den &gt;&gt; Operator und kannst dann damit direkt in die Struktur lesen. An sowas hatte ich noch gar nicht gedacht. Sieht mir jetzt auch arg kompliziert aus. Ich hatte an eine ganz einfache Struktur gedacht, die nur 2 Integers aufnimmt, einen für die Fuse und einen für die zugehörige Adresse, so dass bei jeder Fuse die zugehörige Adresse dabeisteht. Dieser struct ist dann Mitglied einer Klasse Jedec. Vielleicht werde ich das nochmal überarbeiten, wenn ich Deinen Code komplett verstanden habe. Da heißt es jetz wohl erstmal Bücher wälzen.</p>
<p>Gruß</p>
<p>Torben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150933</guid><dc:creator><![CDATA[dercmdr]]></dc:creator><pubDate>Sat, 07 Oct 2006 10:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Sat, 07 Oct 2006 10:56:25 GMT]]></title><description><![CDATA[<p>dercmdr schrieb:</p>
<blockquote>
<p>Wenn ich das soweit richtig sehe überlädst du den &gt;&gt; Operator und kannst dann damit direkt in die Struktur lesen.</p>
</blockquote>
<p>Hallo Torben,</p>
<p>das ist richtig. Das Prinzip ist immer das gleiche.</p>
<p>dercmdr schrieb:</p>
<blockquote>
<p>An sowas hatte ich noch gar nicht gedacht. Sieht mir jetzt auch arg kompliziert aus.</p>
</blockquote>
<p>Das ist reine Gewohnheit. Der operator&gt;&gt; ist nicht komplizierter als jede andere Art von Einlesen. Er macht die Anwendung aber viel einfacher.</p>
<p>dercmdr schrieb:</p>
<blockquote>
<p>Ich hatte an eine ganz einfache Struktur gedacht, die nur 2 Integers aufnimmt, einen für die Fuse und einen für die zugehörige Adresse, so dass bei jeder Fuse die zugehörige Adresse dabeisteht. Dieser struct ist dann Mitglied einer Klasse Jedec.</p>
</blockquote>
<p>.. hat den Nachteil, dass Du erstens viel mehr Speicher brauchst als notwendig und zweitens diese Struktur nicht unmittelbar zum Einlesen hernehemen kannst, Du brauchst also außerhalb der Struktur noch eine Funktion, die das Einlesen übernimmst. Dann fällt mir noch ein, dass Dir dann innerhalb von der Klasse Jedec die Information, welche Fuse in welchem zusammenhängenden Speicherbereich liegt, praktisch verloren geht. Das kann sich später als nachteilig herausstellen.</p>
<p>dercmdr schrieb:</p>
<blockquote>
<p>Vielleicht werde ich das nochmal überarbeiten, wenn ich Deinen Code komplett verstanden habe. Da heißt es jetz wohl erstmal Bücher wälzen.</p>
</blockquote>
<p>Bücher sind Ok; aber selber versuchen und bei Problemen hier nachfragen; am besten möglichst konkrete Fragen stellen. So lernst Du am schnellsten.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150956</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 07 Oct 2006 10:56:25 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Sat, 07 Oct 2006 15:39:40 GMT]]></title><description><![CDATA[<p>So ich habe ein bischen weitergemacht.</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>.. hat den Nachteil, dass Du erstens viel mehr Speicher brauchst als notwendig und zweitens diese Struktur nicht unmittelbar zum Einlesen hernehemen kannst, Du brauchst also außerhalb der Struktur noch eine Funktion, die das Einlesen übernimmst. Dann fällt mir noch ein, dass Dir dann innerhalb von der Klasse Jedec die Information, welche Fuse in welchem zusammenhängenden Speicherbereich liegt, praktisch verloren geht. Das kann sich später als nachteilig herausstellen.</p>
</blockquote>
<p>Mehr Speicher brauche ich, stimmt wohl, ist aber erstmal nicht so wild. Eigentlich könnte ich es auch statisch lassen, aber ich dachte es ist ne schöne Übung. Das Problem mit den zusammenhängenden Speicherbereichen sehe ich nicht, da ich ja zu jeder Fuse die Adresse mit speichere. Genaugenommen ist die Nummer des Array-Elements gleichzeitig die Fuse-Adresse. Oder meinst du etwas anderes?</p>
<p>Ich habe mich jetzt erstmal dazu entschieden, eine Lösung wie von Gerie vorgeschlagen, zu machen. Funktioniert auch alles soweit. Nun habe ich mal eine Frage zum Compiler (Visual Studio 2005 Express). Wenn ich mir beim debuggen jetzt den Zeiger in der Überwachung anschaue, kann ich ja nur den ersten sehen und muss jeden weiteren von Hand eingeben, z.B. zeiger[50], damit ich seine beiden Inhalte adresse und fuse sehen kann. Gibt es auch eine Möglichkeit der Überwachung wie bei einem statischen Array, so dass ich gleich alle Elemente, also zeiger[0] bis zeiger[n] als Aufklappmenü sehen kann?</p>
<p>Gruß</p>
<p>Torben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1151067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1151067</guid><dc:creator><![CDATA[dercmdr]]></dc:creator><pubDate>Sat, 07 Oct 2006 15:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to Array dynamischer Größe in Klasse einbauen? on Sat, 07 Oct 2006 16:20:53 GMT]]></title><description><![CDATA[<p>Dann musst Du wohl fürs Debuggen das ganze in ein extra angelegtes statisches Array kopieren, um alles kompfortabel zu sehen.<br />
Ich weiss jedenfalls keinen anderen Weg.<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1151095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1151095</guid><dc:creator><![CDATA[gerie]]></dc:creator><pubDate>Sat, 07 Oct 2006 16:20:53 GMT</pubDate></item></channel></rss>