<?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[Klasse in eine Binärdatei schreiben und wieder auslesen]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe hier folgende Klasse:</p>
<pre><code class="language-cpp">class database
{
	private:
		string *vorname, *nachname, *strasse, *ort;
		int *plz, *hausnum, *gebtag, *gebmonat, *gebjahr;
		int max;
		int index;
		static const int ERHOEHEN = 5;//Datensatz wird um diesen Wert erweitert, wenn er voll ist	
	public:
		database(int start)
		{
			max = start; //Maximalanzahl der Datensätze
			vorname = new string[max];
			nachname = new string[max];
			strasse = new string[max];
			ort = new string[max];
			plz = new int[max];
			hausnum = new int[max];
			gebtag = new int[max];
			gebmonat = new int[max];
			gebjahr = new int[max];
			index = -1; //Indexcounter
		}

		~database()
		{
			delete [] vorname;
			delete [] nachname;
			delete [] strasse;
			delete [] ort;
			delete [] plz;
			delete [] hausnum;
			delete [] gebtag;
			delete [] gebmonat;
			delete [] gebjahr;
		}

		void add(string ein_vorname, string ein_nachname, string ein_strasse, string ein_ort, int ein_plz, int ein_hausnum, int ein_gebtag, int ein_gebmonat, int ein_gebjahr)
		{
			++index;
			if(index == max)
			{
			    max += ERHOEHEN;

			    //Temporärvariablen zur Speicherung der bisherigen Dateien anlegen
			    string *tmp_vorname = vorname;
                string *tmp_nachname = nachname;
                string *tmp_strasse = strasse;
                string *tmp_ort = ort;
                int *tmp_plz = plz;
                int *tmp_hausnum = hausnum;
                int *tmp_gebtag = gebtag;
                int *tmp_gebmonat = gebmonat;
                int *tmp_gebjahr = gebjahr;

                //neue Speicheranlegung 
                vorname = new string[max];
                nachname = new string[max];
                strasse = new string[max];
                ort = new string[max];
                plz = new int[max];
                hausnum = new int[max];
                gebtag = new int[max];
                gebmonat = new int[max];
                gebjahr = new int[max];

                //temporäre Daten in die Datensätze schreiben
                for(int i = 0; i&lt;index; i++)
                {
                    vorname[i] = tmp_vorname[i];
                    nachname[i] = tmp_nachname[i];
                    strasse[i] = tmp_strasse[i];
                    ort[i] = tmp_ort[i];
                    plz[i] = tmp_plz[i];
                    hausnum[i] = tmp_hausnum[i];
                    gebtag[i] = tmp_gebtag[i];
                    gebmonat[i] = tmp_gebmonat[i];
                    gebjahr[i] = tmp_gebjahr[i];
                }

                //Temporäre Daten löschen, denn sie verbauchen ne Menge Speicher
                delete [] tmp_vorname;
    			delete [] tmp_nachname;
    			delete [] tmp_strasse;
    			delete [] tmp_ort;
    			delete [] tmp_plz;
    			delete [] tmp_hausnum;
    			delete [] tmp_gebtag;
    			delete [] tmp_gebmonat;
    			delete [] tmp_gebjahr;
			}

			vorname[index] = ein_vorname;
            nachname[index] = ein_nachname;
            strasse[index] = ein_strasse;
            ort[index] = ein_ort;
            plz[index] = ein_plz;
            hausnum[index] = ein_hausnum;
            gebtag[index] = ein_gebtag;
            gebmonat[index] = ein_gebmonat;
            gebjahr[index] = ein_gebjahr;

		}

		void entfehrnen(int stelle) //Entfehrnt Daten an einer Bestimmten Stelle
		{
            if(stelle&lt;=index)
            {
                string tmp_vorname[index]; 
                string tmp_nachname[index]; 
                string tmp_strasse[index]; 
                string tmp_ort[index]; 
                int tmp_plz[index]; 
                int tmp_hausnum[index]; 
                int tmp_gebtag[index]; 
                int tmp_gebmonat[index]; 
                int tmp_gebjahr[index]; 
            }
        }

		string get_vorname(int stelle) //Daten an der bestimmten Stelle zurückgeben
		{
            if(stelle&lt;=index)
            {
                return vorname[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        string get_nachname(int stelle)
		{
            if(stelle&lt;=index)
            {
                return nachname[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        string get_strasse(int stelle)
		{
            if(stelle&lt;=index)
            {
                return strasse[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        string get_ort(int stelle)
		{
            if(stelle&lt;=index)
            {
                return ort[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        int get_plz(int stelle)
		{
            if(stelle&lt;=index)
            {
                return plz[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_hausnum(int stelle)
		{
            if(stelle&lt;=index)
            {
                return hausnum[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_gebtag(int stelle)
		{
            if(stelle&lt;=index)
            {
                return gebtag[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_gebmonat(int stelle)
		{
            if(stelle&lt;=index)
            {
                return gebmonat[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_gebjahr(int stelle)
		{
            if(stelle&lt;=index)
            {
                return gebjahr[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_index()
        {
            return index;
        }    

};
</code></pre>
<p>Nun würde ich gerne alle Daten (vorname, nachname, strasse, ort,plz, hausnum, gebtag, gebmonat, gebjahr) in eine Binärdatei speichern und sie beim nächsten Programmstart alle auch wieder einlesen können....<br />
Leider weiß ich ncih, wie ich das anstellen könnte.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/213808/klasse-in-eine-binärdatei-schreiben-und-wieder-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 20:57:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/213808.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 May 2008 11:44:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 11:47:46 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe hier folgende Klasse:</p>
<pre><code class="language-cpp">class database
{
	private:
		string *vorname, *nachname, *strasse, *ort;
		int *plz, *hausnum, *gebtag, *gebmonat, *gebjahr;
		int max;
		int index;
		static const int ERHOEHEN = 5;//Datensatz wird um diesen Wert erweitert, wenn er voll ist	
	public:
		database(int start)
		{
			max = start; //Maximalanzahl der Datensätze
			vorname = new string[max];
			nachname = new string[max];
			strasse = new string[max];
			ort = new string[max];
			plz = new int[max];
			hausnum = new int[max];
			gebtag = new int[max];
			gebmonat = new int[max];
			gebjahr = new int[max];
			index = -1; //Indexcounter
		}

		~database()
		{
			delete [] vorname;
			delete [] nachname;
			delete [] strasse;
			delete [] ort;
			delete [] plz;
			delete [] hausnum;
			delete [] gebtag;
			delete [] gebmonat;
			delete [] gebjahr;
		}

		void add(string ein_vorname, string ein_nachname, string ein_strasse, string ein_ort, int ein_plz, int ein_hausnum, int ein_gebtag, int ein_gebmonat, int ein_gebjahr)
		{
			++index;
			if(index == max)
			{
			    max += ERHOEHEN;

			    //Temporärvariablen zur Speicherung der bisherigen Dateien anlegen
			    string *tmp_vorname = vorname;
                string *tmp_nachname = nachname;
                string *tmp_strasse = strasse;
                string *tmp_ort = ort;
                int *tmp_plz = plz;
                int *tmp_hausnum = hausnum;
                int *tmp_gebtag = gebtag;
                int *tmp_gebmonat = gebmonat;
                int *tmp_gebjahr = gebjahr;

                //neue Speicheranlegung 
                vorname = new string[max];
                nachname = new string[max];
                strasse = new string[max];
                ort = new string[max];
                plz = new int[max];
                hausnum = new int[max];
                gebtag = new int[max];
                gebmonat = new int[max];
                gebjahr = new int[max];

                //temporäre Daten in die Datensätze schreiben
                for(int i = 0; i&lt;index; i++)
                {
                    vorname[i] = tmp_vorname[i];
                    nachname[i] = tmp_nachname[i];
                    strasse[i] = tmp_strasse[i];
                    ort[i] = tmp_ort[i];
                    plz[i] = tmp_plz[i];
                    hausnum[i] = tmp_hausnum[i];
                    gebtag[i] = tmp_gebtag[i];
                    gebmonat[i] = tmp_gebmonat[i];
                    gebjahr[i] = tmp_gebjahr[i];
                }

                //Temporäre Daten löschen, denn sie verbauchen ne Menge Speicher
                delete [] tmp_vorname;
    			delete [] tmp_nachname;
    			delete [] tmp_strasse;
    			delete [] tmp_ort;
    			delete [] tmp_plz;
    			delete [] tmp_hausnum;
    			delete [] tmp_gebtag;
    			delete [] tmp_gebmonat;
    			delete [] tmp_gebjahr;
			}

			vorname[index] = ein_vorname;
            nachname[index] = ein_nachname;
            strasse[index] = ein_strasse;
            ort[index] = ein_ort;
            plz[index] = ein_plz;
            hausnum[index] = ein_hausnum;
            gebtag[index] = ein_gebtag;
            gebmonat[index] = ein_gebmonat;
            gebjahr[index] = ein_gebjahr;

		}

		void entfehrnen(int stelle) //Entfehrnt Daten an einer Bestimmten Stelle
		{
            if(stelle&lt;=index)
            {
                string tmp_vorname[index]; 
                string tmp_nachname[index]; 
                string tmp_strasse[index]; 
                string tmp_ort[index]; 
                int tmp_plz[index]; 
                int tmp_hausnum[index]; 
                int tmp_gebtag[index]; 
                int tmp_gebmonat[index]; 
                int tmp_gebjahr[index]; 
            }
        }

		string get_vorname(int stelle) //Daten an der bestimmten Stelle zurückgeben
		{
            if(stelle&lt;=index)
            {
                return vorname[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        string get_nachname(int stelle)
		{
            if(stelle&lt;=index)
            {
                return nachname[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        string get_strasse(int stelle)
		{
            if(stelle&lt;=index)
            {
                return strasse[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        string get_ort(int stelle)
		{
            if(stelle&lt;=index)
            {
                return ort[stelle];
            }
            else
            {
                return &quot;Fehler!&quot;;
            }
        }

        int get_plz(int stelle)
		{
            if(stelle&lt;=index)
            {
                return plz[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_hausnum(int stelle)
		{
            if(stelle&lt;=index)
            {
                return hausnum[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_gebtag(int stelle)
		{
            if(stelle&lt;=index)
            {
                return gebtag[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_gebmonat(int stelle)
		{
            if(stelle&lt;=index)
            {
                return gebmonat[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_gebjahr(int stelle)
		{
            if(stelle&lt;=index)
            {
                return gebjahr[stelle];
            }
            else
            {
                return -1;
            }
        }

        int get_index()
        {
            return index;
        }    

};
</code></pre>
<p>Nun würde ich gerne alle Daten (vorname, nachname, strasse, ort,plz, hausnum, gebtag, gebmonat, gebjahr) in eine Binärdatei speichern und sie beim nächsten Programmstart alle auch wieder einlesen können....<br />
Leider weiß ich ncih, wie ich das anstellen könnte.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514221</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Thu, 22 May 2008 11:47:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 11:54:43 GMT]]></title><description><![CDATA[<p>std::vector statt normals array<br />
std::ofstream</p>
<p>Aber überleg dir mal ob du bei deinem Code nicht was umstellen solltest.<br />
z.B. std::vector&lt; std::vector&lt;string&gt; &gt;<br />
get...<br />
return daten[NAME][index]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514228</guid><dc:creator><![CDATA[ohje]]></dc:creator><pubDate>Thu, 22 May 2008 11:54:43 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 11:59:20 GMT]]></title><description><![CDATA[<p>nimm ein struct-array oder noch besser einen vector&lt;&gt;</p>
<p>Aber pack die ganzen einzelnen Elemente in eine struct - das macht den Code soviel besser.</p>
<p>Dann kannst du auch die struct einfacher in eine datei speichern. wenn du zB char[] statt strings nimmst, haettest du structs mit fixer groesser. dann musst du nichtmal mehr alle daten im ram halten sondern kannst gezielt auf der datei operieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514233</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 22 May 2008 11:59:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 12:18:19 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>nimm ein struct-array oder noch besser einen vector&lt;&gt;</p>
<p>Aber pack die ganzen einzelnen Elemente in eine struct - das macht den Code soviel besser.</p>
<p>Dann kannst du auch die struct einfacher in eine datei speichern. wenn du zB char[] statt strings nimmst, haettest du structs mit fixer groesser. dann musst du nichtmal mehr alle daten im ram halten sondern kannst gezielt auf der datei operieren</p>
</blockquote>
<p>hm..<br />
Wenn ich das nun mit Hilfe von Structs realisieren will, wie kriege ich es dann hin, dass ich unendlich viele daten eingeben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514249</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Thu, 22 May 2008 12:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 12:23:52 GMT]]></title><description><![CDATA[<p>std::vector&lt;STRUCT&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514257</guid><dc:creator><![CDATA[ohje]]></dc:creator><pubDate>Thu, 22 May 2008 12:23:52 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 12:28:03 GMT]]></title><description><![CDATA[<p>Thunaer schrieb:</p>
<blockquote>
<p>hm..<br />
Wenn ich das nun mit Hilfe von Structs realisieren will, wie kriege ich es dann hin, dass ich unendlich viele daten eingeben kann?</p>
</blockquote>
<p>wenn du eine struct Data hast, dann einfach:</p>
<p>vector&lt;Data&gt; daten</p>
<p>und du hast unendlich viele Daten die du benutzen kannst.<br />
Man kann dann auch schoen die einzelnen structs binaer in eine Datei schreiben - das erspart serialisierungscode. Alternativ, wenn du zB bei string bleiben willst, musst du der struct auch noch ein load() und save() spendieren.</p>
<p>ein neuer eintrag in die datenbank geht dann so:</p>
<pre><code class="language-cpp">Data d;
d.x=1;
d.y=2;
d.z=3;
//...
daten.push_back(d);
</code></pre>
<p>alles in eine datei schreiben geht dann so:</p>
<pre><code class="language-cpp">vector&lt;Data&gt;::iterator i=daten.begin();
vector&lt;Data&gt;::iterator e=daten.end();
ofstream file(...);
while(i!=e) {
  i-&gt;save(file);
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514265</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 22 May 2008 12:28:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 13:25:47 GMT]]></title><description><![CDATA[<p>Sorry, wenn die Frage jetzt dumm ist, aber wie kann ich die Daten wieder ausgeben?<br />
Wenn ich es mit</p>
<pre><code class="language-cpp">while(i!=e)
    {
         cout&lt;&lt;daten[i].nachname&lt;&lt;&quot;|&quot;&lt;&lt;daten[i].vorname&lt;&lt;&quot;|&quot;&lt;&lt;daten[i].strasse&lt;&lt;&quot; &quot;&lt;&lt;daten[i].hausnum&lt;&lt;endl;
    }
</code></pre>
<p>versuche geht es nicht, weil er mir sagt:&quot; no match for 'operator[]' in 'daten[i]' &quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514303</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Thu, 22 May 2008 13:25:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 13:26:48 GMT]]></title><description><![CDATA[<p>Was ist daten für ein Typ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514312</guid><dc:creator><![CDATA[ohje]]></dc:creator><pubDate>Thu, 22 May 2008 13:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 13:35:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct database
{

    char vorname[255];
    char nachname[255];
    char strasse[510];
    char ort[255];
    int hausnum;
    int plz;
    int gebtag;
    int gebmonat;
    int gebjahr;
    int id;

};
</code></pre>
<p>und</p>
<pre><code class="language-cpp">vector&lt;database&gt; Personendaten;
</code></pre>
<p>Und personendaten wird an die entsprechende funktion übergeben..<br />
Hier der Prototyp:</p>
<pre><code class="language-cpp">int show_eintrag(HANDLE stdOut, vector&lt;database&gt; daten, COORD xy);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1514317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514317</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Thu, 22 May 2008 13:35:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 17:25:51 GMT]]></title><description><![CDATA[<p>Thunaer schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">while(i!=e)
...
</code></pre>
</blockquote>
<p>Hmmm, das sieht so ais, als würdest Du hier 2 Konzepte mischen: Iterator und Index.<br />
Dazwischen musst Du Dich entscheiden.<br />
(BTW: for-Schleifen sind ideal für sowas)</p>
<p>Also entweder:</p>
<pre><code class="language-cpp">for(size_t i=0; i&lt;daten.size(); ++i) 
      cout&lt;&lt;daten[i].nachname&lt;&lt;&quot;|&quot;&lt;&lt;daten[i].vorname&lt;&lt;&quot;|&quot;&lt;&lt;daten[i].strasse&lt;&lt;&quot; &quot;&lt;&lt;daten[i].hausnum&lt;&lt;endl;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">for(vector&lt;database&gt;::const_iterator i=daten.begin(); i&lt;daten.end(); ++i) 
      cout&lt;&lt;i-&gt;nachname&lt;&lt;&quot;|&quot;&lt;&lt;i-&gt;vorname&lt;&lt;&quot;|&quot;&lt;&lt;i-&gt;strasse&lt;&lt;&quot; &quot;&lt;&lt;i-&gt;hausnum&lt;&lt;endl;
</code></pre>
<p>(Du siehst also: Iteratoren verwendet man wie Zeiger - genauergesagt sind &quot;Zeiger&quot; hier ein Sonderfall von Iteratoren)</p>
<p>Noch ein paar Anmerkungen:<br />
1.) mach nicht zuviel &quot;endl&quot;. kostet nur unnötig Performance. Zeilenumbruch geht prima mit '\n';<br />
2.) ich würde mir seeeeehr genau überlegen, ob ich WIRKLICH die Objekte im compilerspezifischen Binärformat ablegen will - denn das hat eine Menge Nachteile und IMHO nur sehr wenig Vorteile. Da gab's hier mal eine schöne Seite, auf die verwiesen wurde, aber den Link finde ich nicht mehr.<br />
3.) Denk daran, wie Parameter per value übergeben werden: Es wird eine Kopie angelegt, was bei größeren vector-en mächtig auf die Performance schlagen und bei ändernden Zugriffen zu unerwarteten Ergebnissen führen kann.<br />
4.) Wenn Du einen Parameter nicht ändern willst, deklariere ihn const. Das schafft Klarheit und Sicherheit.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514456</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 May 2008 17:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 17:16:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct database
{

    char vorname[255];
    char nachname[255];
    char strasse[510];
    char ort[255];
    int hausnum;
    int plz;
    int gebtag;
    int gebmonat;
    int gebjahr;
    int id;

};

void show_eintrag(vector&lt;database&gt; const&amp; daten){
	for( size_t i=0; i&lt;daten.size();i++)
    {
         cout&lt;&lt;daten[i].nachname&lt;&lt;&quot;|&quot;&lt;&lt;daten[i].vorname&lt;&lt;&quot;|&quot;&lt;&lt;daten[i].strasse&lt;&lt;&quot; &quot;&lt;&lt;daten[i].hausnum&lt;&lt;endl;
    }
}

int main()
{
	vector&lt;database&gt; Personendaten;
	show_eintrag(Personendaten);
    return 0;
}
</code></pre>
<p>kompiliert bei mir ohne probleme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514459</guid><dc:creator><![CDATA[ohje]]></dc:creator><pubDate>Thu, 22 May 2008 17:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Thu, 22 May 2008 17:23:33 GMT]]></title><description><![CDATA[<p>ohje schrieb:</p>
<blockquote>
<p>...kompiliert bei mir ohne probleme</p>
</blockquote>
<p>Ich glaube ja auch nicht, dass sein Problem bei dem Typ von &quot;daten&quot; sondern bei dem von &quot;i&quot; liegt (siehe mein letztes Posting).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1514466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1514466</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 May 2008 17:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Sun, 25 May 2008 16:39:20 GMT]]></title><description><![CDATA[<p>Hm ok danke!<br />
Die Eingabe und die Ausgabe funktioniert wunderbar bisher....<br />
Wenn ich aber versuche die Einträge so abzuspeichern gibt der Compiler mir einen Fehler aus....</p>
<pre><code class="language-cpp">FILE *datei;
    if((datei = fopen(&quot;data.db&quot;, &quot;wb&quot;)) == NULL)
    {
         fflush(stdin);
         cout&lt;&lt;&quot;Datei konnte nich geoeffnet werden!&quot;&lt;&lt;endl;
         cin.get();
    }
    else
    {
         fwrite(daten, sizeof(struct database), daten.size(), datei); 
    }
    fclose(datei);
</code></pre>
<p>Der Fehler:</p>
<pre><code>cannot convert `std::vector&lt;database, std::allocator&lt;database&gt; &gt;' to `const void*' for argument `1' to `size_t fwrite(const void*, size_t, size_t, FILE*)'
</code></pre>
<p>Wäre nett wenn ihr mir mal wieder helfen könntet</p>
<p>mfg</p>
<p>Edit:<br />
Hm, warum funktioniert das nich:</p>
<pre><code class="language-cpp">database *tmp;
   size_t i;
   int x = 0;
   for(i=0; i&lt;daten.size(); ++i)
    {
         strcpy(tmp[x].nachname, daten[i].nachname);
         strcpy(tmp[x].ort, daten[i].ort);
         strcpy(tmp[x].strasse, daten[i].strasse);
         strcpy(tmp[x].vorname, daten[i].vorname);
         tmp[x].gebjahr = daten[i].gebjahr;
         tmp[x].gebmonat = daten[i].gebmonat;
         tmp[x].gebtag = daten[i].gebtag;
         tmp[x].hausnum = daten[i].hausnum;
         tmp[x].id = daten[i].id;
         tmp[x].plz = daten[i].plz;
         x++;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1516406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516406</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Sun, 25 May 2008 16:39:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Sun, 25 May 2008 18:02:48 GMT]]></title><description><![CDATA[<p>Achso was ich noch sagen wollte:<br />
Der Compiler gibt mir beim letzteren Code keinen Fehler aus, sondern die *.exe schmiert an der Stelle des ersten strcpy ab....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516515</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Sun, 25 May 2008 18:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Sun, 25 May 2008 18:36:44 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>mein Tipp: Lass' es !!</p>
<p>(das &quot;Binärspeichern&quot;) <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="😉"
    /><br />
Du hast eigentlich scohn alles, was Du brauchst: So wie Du Deine Objekte auf Konsole ausgibst, kannst Du sie auch in eine Datei ausgeben und wieder einlesen.<br />
Das einzige, was Du tun musst, ist, mit dem operator&lt;&lt;() in einen ofstream statt nach cout zu &quot;schieben&quot;....</p>
<p>Glaub mir: Es hat zahllose Vorteile und (für Dich) keine Nachteile....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516534</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 25 May 2008 18:36:44 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Sun, 25 May 2008 18:41:25 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>mein Tipp: Lass' es !!</p>
<p>(das &quot;Binärspeichern&quot;) <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="😉"
    /><br />
Du hast eigentlich scohn alles, was Du brauchst: So wie Du Deine Objekte auf Konsole ausgibst, kannst Du sie auch in eine Datei ausgeben und wieder einlesen.<br />
Das einzige, was Du tun musst, ist, mit dem operator&lt;&lt;() in einen ofstream statt nach cout zu &quot;schieben&quot;....</p>
<p>Glaub mir: Es hat zahllose Vorteile und (für Dich) keine Nachteile....</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Hm ja.<br />
Das Problem ist nur, dass es ein Projekt für die Schule ist, welches benotet wird und der Lehrer Binärdateien fordert....<br />
Was wir machen konnten wir uns aussuschen, es sollten aber aufjedenfall:<br />
1. Daten in Binärdateien geschrieben ausgelesen werden<br />
2. Sortier und Suchalgorythmen vorhanden sein</p>
<p>Ich würde es mit Binärdateien ja liebend gerne lassen, aber es geht ja leider nicht....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516539</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Sun, 25 May 2008 18:41:25 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Sun, 25 May 2008 19:04:38 GMT]]></title><description><![CDATA[<p>Hab meinen fehler schon selber gefunden, war wirklich dumm irgendwie ^^</p>
<p>Das hat gefehlt:</p>
<pre><code class="language-cpp">tmp = new database[daten.size()];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1516547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516547</guid><dc:creator><![CDATA[Thunaer]]></dc:creator><pubDate>Sun, 25 May 2008 19:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in eine Binärdatei schreiben und wieder auslesen on Sun, 25 May 2008 19:22:18 GMT]]></title><description><![CDATA[<p>Thunaer schrieb:</p>
<blockquote>
<p>...<br />
Hm ja.<br />
Das Problem ist nur, dass es ein Projekt für die Schule ist, welches benotet wird und der Lehrer Binärdateien fordert...</p>
</blockquote>
<p>OK - da kann man nichts machen.</p>
<p>Dein Ansatz mit fwrite() ist an sich schon nicht schlecht, aber Du musst genau betrachten, was Du speichern willst:<br />
- das vector-Objekt (also alle Verwaltungsinformationen),<br />
- die einzelnen Elemente hier also die &quot;database-Objekte&quot;.<br />
Stell Dir einfach mal eine Simpelimplementation von vector vor:</p>
<pre><code class="language-cpp">class vector {
   database* elemente;
   size_t anzahl;
public:
   database&amp; operator[](size_t i) { return elemente[i]; }
   size_t size() { return anzahl; }
};
</code></pre>
<p>Wenn Du nun diesen vector abspeicherst, kommt in die Datei lediglich ein Zeiger und ein size_t ... was Dir wahrscheinlich nicht reichen wird.<br />
(mit string hättest Du dasselbe Problem - bei Deiner database-Klasse hast Du das &quot;Glück&quot;, dass sie ihre Daten als char-Arrays halten).<br />
Wenn Du das also &quot;binär&quot; speichern willst, solltest Du die Elemente einzeln durchgehen und jedes einzelne &quot;weg-fwrite-n&quot;.</p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Vielleicht kannst Du mal Deinen Lehrer auf die Probleme mit dem &quot;Binärspeichern&quot; hinweisen ... natürlich erst, wenn Du Deine Note eingesackt hast. <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1516549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1516549</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 25 May 2008 19:22:18 GMT</pubDate></item></channel></rss>