<?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 inhalt aus klasse in main übergeben]]></title><description><![CDATA[<p>In der Datei.cpp gibt es eine Klasse, die den Inhalt von Dateien ausließt, was auch funktioniert. Wie lässt sich der inhalt von Buffer jetzt in der main.cpp abfragen? Hier die Dateien:</p>
<p>Datei.h:</p>
<pre><code>/Datei_h

#ifndef Datei_h
#define Datei_h

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;stdlib.h&gt;

using namespace std;													//std:: fällt weg

class Datei{
private:
	char *neubuffer;													//Datenbuffer
	unsigned int minFilesize;
	unsigned int faktor;
	unsigned int neusize;
	ifstream quelle;													//Datei-Handle
	string Dateiname;

public:
	char *buffer;														//Datenbuffer
	unsigned int size;

	Datei();															//constructor
	~Datei();															//destructor
	void oeffnen(string Dateiname);
	int groesse();
	void lesen(char *buffer, unsigned int &amp;size);
	void schliessen();
	void anpassen(unsigned int minFilesize, unsigned int &amp;size, char *buffer);
};

#endif //Datei_h
</code></pre>
<p>Datei.cpp:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;stdlib.h&gt;
#include &quot;Datei.h&quot;

using namespace std;													//std:: fällt weg

//constructor
Datei::Datei(){
	size = 0;
	buffer = new char[size];
}

//destructor
Datei::~Datei(){
	delete [] buffer;
}

//oeffnen
void Datei::oeffnen(string Dateiname){
	quelle.open(Dateiname.c_str(), ios::binary|ios::in|ios::ate);		//Öffne Datei aus Parameter
	if (! quelle.good()){cout &lt;&lt; &quot;Error: Could not open file &quot; &lt;&lt; endl;}//Fehlermeldung wenn Datei 
}

//size
int Datei::groesse(){
	size = quelle.tellg();												//Dateigrösse durch Endposition ermitteln
	return size;
}

//auslesen
void Datei::lesen(char *buffer, unsigned int &amp;size){
	buffer = new char [size];											//allocate memory for file content
	quelle.seekg(0);													//setze die Leseposition auf 0 gemessen vom Dateianfang
	quelle.read(buffer, size);											//Datei auslesen
}

//schliessen
void Datei::schliessen(){
	quelle.close();														//Datei schließen
}

//Einheitsgroesse
void Datei::anpassen(unsigned int minFilesize, unsigned int &amp;size, char *buffer){
	faktor = minFilesize/size;											//Faktor zur Umrechnung in Einheitsgröße
	neusize = faktor*size;												//neue Größe
	neubuffer = new char [neusize];										//allocate memory for file content

	for(unsigned int h=0; h&lt;neusize; h+=(4*faktor)){					//Daten kopireren bis Einheitsgröße erreicht
		for(unsigned int i=0; i&lt;4; i++){
			for(unsigned int j=0; j&lt;faktor; j++){
				neubuffer[(i+j*4)+h]=buffer[i+h/faktor];
				}
		}
	}

	buffer = neubuffer;
	size = neusize;
	delete[] neubuffer;													//Speicher wieder frei geben
}
</code></pre>
<p>und die main.cpp:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
//#include &lt;pthread.h&gt;													//-lpthread linken
//#include &lt;SerialStream.h&gt;												//-lserial linken
#include &quot;Datei.h&quot;

using namespace std;													//std:: fällt weg

int main() {
	unsigned int size;
	char *buffer;
	int minFilesize = 50000;

	Datei neueDatei;
	neueDatei.oeffnen(&quot;../Figuren/default.hex&quot;);
	size = neueDatei.groesse();
	buffer = new char[size];
	cout &lt;&lt; &quot;size &quot; &lt;&lt; size &lt;&lt; endl;
	neueDatei.lesen(buffer, size);
	for(unsigned int i=0; i&lt;size; i++){cout &lt;&lt; buffer[i];}
	neueDatei.schliessen();
	neueDatei.anpassen(minFilesize, size, buffer);
	delete [] buffer;
	return 0;
}
</code></pre>
<p>Bin dankbar für alle Tips. Die for-Schleife in main.cpp liefert nicht die gewünschten Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253284/array-inhalt-aus-klasse-in-main-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 19:59:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253284.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 31 Oct 2009 00:11:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Sat, 31 Oct 2009 00:11:35 GMT]]></title><description><![CDATA[<p>In der Datei.cpp gibt es eine Klasse, die den Inhalt von Dateien ausließt, was auch funktioniert. Wie lässt sich der inhalt von Buffer jetzt in der main.cpp abfragen? Hier die Dateien:</p>
<p>Datei.h:</p>
<pre><code>/Datei_h

#ifndef Datei_h
#define Datei_h

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;stdlib.h&gt;

using namespace std;													//std:: fällt weg

class Datei{
private:
	char *neubuffer;													//Datenbuffer
	unsigned int minFilesize;
	unsigned int faktor;
	unsigned int neusize;
	ifstream quelle;													//Datei-Handle
	string Dateiname;

public:
	char *buffer;														//Datenbuffer
	unsigned int size;

	Datei();															//constructor
	~Datei();															//destructor
	void oeffnen(string Dateiname);
	int groesse();
	void lesen(char *buffer, unsigned int &amp;size);
	void schliessen();
	void anpassen(unsigned int minFilesize, unsigned int &amp;size, char *buffer);
};

#endif //Datei_h
</code></pre>
<p>Datei.cpp:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;stdlib.h&gt;
#include &quot;Datei.h&quot;

using namespace std;													//std:: fällt weg

//constructor
Datei::Datei(){
	size = 0;
	buffer = new char[size];
}

//destructor
Datei::~Datei(){
	delete [] buffer;
}

//oeffnen
void Datei::oeffnen(string Dateiname){
	quelle.open(Dateiname.c_str(), ios::binary|ios::in|ios::ate);		//Öffne Datei aus Parameter
	if (! quelle.good()){cout &lt;&lt; &quot;Error: Could not open file &quot; &lt;&lt; endl;}//Fehlermeldung wenn Datei 
}

//size
int Datei::groesse(){
	size = quelle.tellg();												//Dateigrösse durch Endposition ermitteln
	return size;
}

//auslesen
void Datei::lesen(char *buffer, unsigned int &amp;size){
	buffer = new char [size];											//allocate memory for file content
	quelle.seekg(0);													//setze die Leseposition auf 0 gemessen vom Dateianfang
	quelle.read(buffer, size);											//Datei auslesen
}

//schliessen
void Datei::schliessen(){
	quelle.close();														//Datei schließen
}

//Einheitsgroesse
void Datei::anpassen(unsigned int minFilesize, unsigned int &amp;size, char *buffer){
	faktor = minFilesize/size;											//Faktor zur Umrechnung in Einheitsgröße
	neusize = faktor*size;												//neue Größe
	neubuffer = new char [neusize];										//allocate memory for file content

	for(unsigned int h=0; h&lt;neusize; h+=(4*faktor)){					//Daten kopireren bis Einheitsgröße erreicht
		for(unsigned int i=0; i&lt;4; i++){
			for(unsigned int j=0; j&lt;faktor; j++){
				neubuffer[(i+j*4)+h]=buffer[i+h/faktor];
				}
		}
	}

	buffer = neubuffer;
	size = neusize;
	delete[] neubuffer;													//Speicher wieder frei geben
}
</code></pre>
<p>und die main.cpp:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
//#include &lt;pthread.h&gt;													//-lpthread linken
//#include &lt;SerialStream.h&gt;												//-lserial linken
#include &quot;Datei.h&quot;

using namespace std;													//std:: fällt weg

int main() {
	unsigned int size;
	char *buffer;
	int minFilesize = 50000;

	Datei neueDatei;
	neueDatei.oeffnen(&quot;../Figuren/default.hex&quot;);
	size = neueDatei.groesse();
	buffer = new char[size];
	cout &lt;&lt; &quot;size &quot; &lt;&lt; size &lt;&lt; endl;
	neueDatei.lesen(buffer, size);
	for(unsigned int i=0; i&lt;size; i++){cout &lt;&lt; buffer[i];}
	neueDatei.schliessen();
	neueDatei.anpassen(minFilesize, size, buffer);
	delete [] buffer;
	return 0;
}
</code></pre>
<p>Bin dankbar für alle Tips. Die for-Schleife in main.cpp liefert nicht die gewünschten Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801039</guid><dc:creator><![CDATA[Laserandi]]></dc:creator><pubDate>Sat, 31 Oct 2009 00:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Sun, 01 Nov 2009 13:20:45 GMT]]></title><description><![CDATA[<p>Laserandi schrieb:</p>
<blockquote>
<p>In der Datei.cpp gibt es eine Klasse, die den Inhalt von Dateien ausließt, was auch funktioniert. Wie lässt sich der inhalt von Buffer jetzt in der main.cpp abfragen? Hier die Dateien:</p>
</blockquote>
<p>über einen getter</p>
<p>außerdem solltest du copyctor private machen, sonst geht dann 100pro was schief <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=";D"
      alt="😉"
    /></p>
<p>um mal etwas ausführlich zu werden als heut nacht:</p>
<pre><code class="language-cpp">/*header*/

#ifndef H_TEST_INCLUDED
#define H_TEST_INCLUDED

//#include &lt;iostream&gt;
//#include &lt;fstream&gt;
//#include &lt;cstdlib&gt; //so heißt der header wirklich
//brauchst du nicht

#include &lt;string&gt;
#include &lt;vector&gt; //unser dynamisches array

//using namespace std; //das hier tut man in headern niemals - hebelt namespaces ja komplett aus(überall, wo es includiert wird)

class Datei
{
private:
//	char *neubuffer;													//Datenbuffer
//so würde man das vll in C machen, in C++ gibts sichere und bequemere Wege :)
	std::vector &lt;char&gt; buffer; //ein array (beliebiger länge) of char
	//unsigned int minFilesize;
	//unsigned int faktor;
	//unsigned int neusize;
	//ifstream quelle;													//Datei-Handle
//nichts davon sollte ein member sein, außer:
	std::string dateiname;
public:
//	char *buffer;														//Datenbuffer
//	unsigned int size;
// brauchst du hier nicht

	Datei();															//standardconstructor
	explicit Datei(const std::string &amp;dateiname); //erspart dem nutzer einen fkt.-aufruf
	//große objekte(ab ca. 2DWORDs) übergibt man nicht mehr by value sondern by (const) reference
	//explicit, damit nicht irgendwo ein string ausversehen in eine Datei umgewandelt wird, kurzes bsp:
	//Datei get_savegame()
	//{
	//	return &quot;asd&quot;; //const char* -&gt; string -&gt; Datei
	//}
	//wenn das wer will, muss er schon
	//	return Datei(&quot;asd&quot;);
	//schreiben
	//es gibt aber durchaus fälle, wo so eine implizite umwandlung durchaus sinn macht

	//~Datei();															//destructor
//brauchst du auch nicht mehr
	//void oeffnen(string Dateiname);
	void oeffnen(const std::string &amp;dateiname);

	//int groesse();
	//fkt, die nichts am objekt ändern, sollten dies auch kennzeichnen (const correctness):
	//int groesse() const;
	//nun ist der rückgabetyp aber signed(kann pos. und neg. werte annehmen - ne datei ist aber immer &gt;= 0 ;o)), also:
	unsigned int groesse() const;

	//void lesen(char *buffer, unsigned int &amp;size);
	//das hier können viel hübscher tun:
	//std::vector&lt;char&gt; data();
	//auch diese fkt ändert das objekt wieder nicht, also:
	//std::vector&lt;char&gt; data() const;
	//nun können wir es dem nutzer aber auch noch überlassen, ob er überhaupt eine kopei erstellen will
	//oder ihm eine (konstante) referenz reicht - der vorteil sollte offensichtlich sein: wir müssen keinen
	//riesigen block an daten kopieren
	const std::vector&lt;char&gt;&amp; data() const;

	void schliessen(); //lassen wir so, brauchen wir aber eigtl nicht mehr
	//(da wir den stream nicht die ganze zeit geöffnet lassen)

	//void anpassen(unsigned int minFilesize, unsigned int &amp;size, char *buffer);
	//was die fkt hier machen soll, versteh ich nicht so ganz
};

#endif //#ifndef H_TEST_INCLUDED
</code></pre>
<pre><code class="language-cpp">/*source*/
#include &lt;algorithm&gt; //brauchen wir beim einlesen
#include &lt;iterator&gt; //brauchen wir beim einlesen
#include &lt;fstream&gt;
#include &lt;string&gt; //haben wir zwar schon im header, aber schaden tuts auch nicht ^^
#include &lt;vector&gt; //haben wir zwar schon im header, aber schaden tuts auch nicht ^^

#include &quot;Datei.h&quot;

using namespace std;													//std:: fällt weg
//ist hier ok - aber es gibt auch mehrere, die das std:: lieber immer mitschreiben
//immerhin ist es eine extrem nützliche angabe, wo die fkt/das objekt herkommt

Datei::Datei()
{
	//hier müssen wir jetzt gar nichts mehr tun :clown:
}

Datei::Datei(const std::string &amp;dateiname)
:	dateiname(dateiname)//initialisierungsliste
// was hier passiert ist gerade ein wenig doof zu erkennen, weil ich beides gleich genannt habe, aber ist
// nichts weiter als ein konstruktor-aufruf eines members (wenn hier nichts steht, wird der default-
// konstruktor aufgerufen
// später in der eigtl Fkt., können dann nur noch Zuweisungen ausgeführt werden
{
	ifstream dateistream(dateiname.c_str());
	//das einlesen ist evtl ein wenig schwer verständlich
	std::istream_iterator&lt;char&gt; anfang(dateistream);
	std::istream_iterator&lt;char&gt; ende;
	buffer.assign(anfang, ende);
	//iteratoren sind in C++ ein sehr mächtiges Konzept, es geht eigtl alles damit:
	//in der ersten (der drei zeilen) zeile wird ein iterator(vll mit zeiger übersetzbar) erstellt, der auf
	//den anfang der datei zeigt
	//danach wird ein ungültiger zeiger erstellt, den gleichen wert nimmt der erste zeiger auch an,
	//wenn dieser oft genug weitergeschoben wird
	//schließlich wird dem buffer alles zugewiesen (assign), was in dem intervall [anfang, ende) liegt
	//== einschließlich anfang, ende ist aber nicht mehr mit dabei(weil ende ja auch &quot;leer&quot; ist
}

void Datei::oeffnen(const std::string &amp;dateiname)
{
	this-&gt;dateiname = dateiname; //hier ist this nötig, weil der parameter den gleichen namen wie der member hat
	//und diesen somit überdeckt. wenn das nicht so wäre, bräuchte man das this auch nicht (und sollte es weglassen^^)

	//wir erinnern uns an das einlesen:
	ifstream dateistream(dateiname.c_str()); //hier ist es egal, welchen dateinamen wir nehmen, da beide gleich sind^^
	std::istream_iterator&lt;char&gt; anfang(dateistream);
	std::istream_iterator&lt;char&gt; ende;
	buffer.assign(anfang, ende);
}

unsigned int Datei::groesse() const
{
	return buffer.size(); //unser buffer weiß selbst, wie lang er ist
}

const std::vector&lt;char&gt;&amp; Datei::data() const
{
	return buffer;
}

void Datei::schliessen()
{
	std::vector&lt;char&gt;().swap(buffer); //ist ein wenig tricky:
	//hier wird der buffer nicht nur geleert sondern auch noch sein speicherplatz freigegeben
	//da das nicht so einfach geht (clear() gibt den speicherbereich auch nicht wieder frei)
	//müssen wir eine andere (leere) instanz erzeugen (std::vector&lt;char&gt;()) und dann unseren
	//vollen vector mit dem anderen tauschen (swap(buffer)), man könnte auch etwas ausführlicher
	//so etwas schreiben:
	//std::vector &lt;char&gt; leerer_vector;
	//leerer_vector.swap(buffer); //bzw. buffer.swap(leerer_vector) - das ist egal, wie rum
	//nur bei unserer variante können wir die reihenfolge nicht ändern, weil in den klammern
	//eine referenz stehen muss, ein temporär erzeugtes objekt kann aber nicht an eine
	//referenz gebunden werden
}
</code></pre>
<p>(ich merk gerade, dass ich doch ein paar mal den namespace (unnötigerweise) mit angegeben habe (std::) - lass dich davon einfach nicht verwirren^^</p>
<p>also ohne die ganzen kommentare und (du erinnerst dich hoffentlich noch an das öffnen, was 2mal in unserem code vorkommt) den doppelten code würde das dann so aussehen:</p>
<pre><code class="language-cpp">/*header*/

#ifndef H_TEST_INCLUDED
#define H_TEST_INCLUDED

#include &lt;string&gt;
#include &lt;vector&gt;

class Datei
{
private:
	std::vector &lt;char&gt; buffer;
	std::string dateiname;

	void fill_buffer();
public:
	Datei();
	explicit Datei(const std::string &amp;dateiname);

	void oeffnen(const std::string &amp;dateiname);
	void schliessen();

	unsigned int groesse() const;
	const std::vector&lt;char&gt;&amp; data() const;
};

#endif //#ifndef H_TEST_INCLUDED
</code></pre>
<pre><code class="language-cpp">/*source*/
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

#include &quot;Datei.h&quot;

Datei::Datei()
{}

Datei::Datei(const std::string &amp;dateiname)
:	dateiname(dateiname)
{
	fill_buffer();
}

void Datei::fill_buffer()
{
	std::ifstream dateistream(dateiname.c_str());
	std::istream_iterator&lt;char&gt; anfang(dateistream);
	std::istream_iterator&lt;char&gt; ende;
	buffer.assign(anfang, ende);
}

void Datei::oeffnen(const std::string &amp;dateiname)
{
	this-&gt;dateiname = dateiname;
	fill_buffer();
}

unsigned int Datei::groesse() const
{
	return buffer.size();
}

const std::vector&lt;char&gt;&amp; Datei::data() const
{
	return buffer;
}

void Datei::schliessen()
{
	std::vector&lt;char&gt;().swap(buffer);
}
</code></pre>
<p>wie du jetzt (wahrscheinlich eher nicht^^) siehst, müssen wir den kopier-konstruktor und zuweisungsoperator auch nicht mehr private machen.<br />
das hätten wir zuvor gemacht, weil die vom compiler generierten keine tiefe kopie sondern nur eine flache machen(nur der pointer wird kopiert, aber nicht das, worauf er zeigt). also könnte z.bsp. ein und derselbe speicher zweimal nacheinander freigegeben werden - und das gibt beim 2. mal natürlich nen großes problem: der speicher gehört deinem programm gar nicht mehr -&gt; das betriebssystem wird dein programm einfach sofort schließen.<br />
das ganze umgeht man, indem man kopierctor und op= entweder richtig implementiert oder einfach private macht(und dann nur deklariert, aber nicht definiert)</p>
<p>wenn du noch fragen hast, dann frag ruhig^^<br />
und sag mal noch, was die komische fkt machen soll, die nen faktor und was weiß ich nicht noch alles übergeben bekommt <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=";D"
      alt="😉"
    /></p>
<p>bb</p>
<p>edit: im source fehlte noch 3x &quot;Datei::&quot;, sry^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801061</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 01 Nov 2009 13:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Sun, 01 Nov 2009 12:42:22 GMT]]></title><description><![CDATA[<p>WOW!<br />
Viiiiieeeeelen Dank, unskilled.<br />
Da hast Du Dir aber wirklich viel Mühe gegeben.<br />
Jetzt brauch ich erstmal ein paar Tage um alles<br />
zu verdauen (habe vor ca. 7 Jahren im Studium<br />
das letzte mal mit c/c++ gearbeitet).</p>
<p>Die fkt unter &quot;//Einheitsgroesse&quot; hat die<br />
Aufgabe, die aus der Datei ausgelesenen Daten<br />
zu vervielfachen, bis die vorher festgelegte<br />
Einheitsgröße erreicht wird.<br />
Bsp. Inhalt der Quelldatei:<br />
&quot;abcdefgh...&quot;<br />
wird nach der Funktion:<br />
&quot;abcdabcdabcdabcdefghefghefghefgh...&quot;</p>
<p>Die Anzahl der Kopiervorgänge ist der Faktor.<br />
Wahrscheinlich ist meine Lösung nicht die<br />
einfachste aber sie funktioniert.</p>
<p>Jetzt werde ich mir erst mal Deinen Quellcode<br />
anschauen und mich dann wieder melden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801602</guid><dc:creator><![CDATA[Laserandi]]></dc:creator><pubDate>Sun, 01 Nov 2009 12:42:22 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Sun, 01 Nov 2009 13:41:15 GMT]]></title><description><![CDATA[<p>dann hier noch mal der komplette source-code:</p>
<pre><code class="language-cpp">#include &lt;iterator&gt; 
#include &lt;iomanip&gt; 
#include &lt;fstream&gt; 
#include &lt;string&gt; 
#include &lt;vector&gt; 

#include &quot;test.h&quot; 

Datei::Datei() 
{} 

Datei::Datei(const std::string &amp;dateiname) 
:    dateiname(dateiname) 
{ 
    fill_buffer(); 
} 

void Datei::fill_buffer() 
{ 
    std::fstream dateistream(dateiname.c_str());
	dateistream &lt;&lt; std::noskipws;
    std::istream_iterator&lt;char&gt; anfang(dateistream); 
    std::istream_iterator&lt;char&gt; ende; 
    buffer.assign(anfang, ende); 
} 

void Datei::oeffnen(const std::string &amp;dateiname) 
{ 
    this-&gt;dateiname = dateiname; 
    fill_buffer(); 
} 

unsigned int Datei::groesse() const 
{ 
    return buffer.size(); 
} 

const std::vector&lt;char&gt;&amp; Datei::data() const 
{ 
    return buffer; 
} 

void Datei::schliessen() 
{ 
    std::vector&lt;char&gt;().swap(buffer); 
}

void Datei::vervielfache_inhalt(std::size_t mindest_groesse)
{
	buffer.reserve(mindest_groesse);
	std::size_t l = groesse();
	if(l == 0)
		throw std::runtime_error(&quot;0*x &lt; mindest_groesse&quot;);

	std::ofstream stream(dateiname.c_str(), std::ios_base::app);

	while(mindest_groesse &gt; groesse())
	{
		for(std::vector&lt;char&gt;::size_type i(0); i != l; ++i)
			buffer.push_back(buffer[i]);

		stream.write(&amp;buffer[0], l);
	}
}
</code></pre>
<p>im header fehlt noch die zeile:</p>
<pre><code class="language-cpp">void vervielfache_inhalt(std::size_t mindest_groesse);
</code></pre>
<p>anwendung:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &quot;test.h&quot;

int main()
{
	Datei tmp(&quot;Q:/a.txt&quot;);
	tmp.vervielfache_inhalt(10);

	std::cout.write(&amp;*tmp.data().begin(), tmp.groesse());
}
</code></pre>
<p>geht mit sicherheit auch noch toller, aber mir ist gerade nichts besseres eingefallen....</p>
<p>bb : &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801633</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 01 Nov 2009 13:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Sun, 01 Nov 2009 23:07:59 GMT]]></title><description><![CDATA[<p>Wenn ich unter Linux compiliere, bekomme ich folgende Fehlermeldungen:</p>
<p>1. Datei.cpp:53: Fehler: »runtime_error« ist kein Element von »std«<br />
2. Datei.cpp:62: Fehler: »stream« wurde in diesem Gültigkeitsbereich nicht definiert</p>
<p>Generelle Frage: Warum benutzt Du vectoren. in vielen Tutorials und Büchern liesst man, dass dynamischer Speicher mit new und delete (auch in c++) verwendet wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801929</guid><dc:creator><![CDATA[Laserandi]]></dc:creator><pubDate>Sun, 01 Nov 2009 23:07:59 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Sun, 01 Nov 2009 23:19:06 GMT]]></title><description><![CDATA[<p>Laserandi schrieb:</p>
<blockquote>
<p>Generelle Frage: Warum benutzt Du vectoren. in vielen Tutorials und Büchern liesst man, dass dynamischer Speicher mit new und delete (auch in c++) verwendet wird?</p>
</blockquote>
<p>hmm... ich nutze so gut wie nie new/delete<br />
sollte man auch wo möglich umgehen (stichwort RAII)</p>
<p><em>runtime_error</em> -&gt; <code>#include &lt;stdexcept&gt;</code></p>
<p><em>2. Datei.cpp:62: Fehler: »stream« wurde in diesem Gültigkeitsbereich nicht definiert</em><br />
versteh ich nicht <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=":/"
      alt="😕"
    /> hast du dich auch ganz sicher nicht vertippt?</p>
<p><code>buffer.reserve(mindest_groesse);</code><br />
das hier müsstest du mal noch korrigieren:<br />
<code>reserve(mindest_groesse/groesse() + mindest_groesse%groesse() == 0 ? 0 : groesse);</code></p>
<p><code>std::size_t l = groesse();</code><br />
würd ich btw length oder size oder irgendwie so nennen - l ist genau wie I so nen no-go-bezeichner <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=";D"
      alt="😉"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801934</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 01 Nov 2009 23:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Mon, 02 Nov 2009 00:31:17 GMT]]></title><description><![CDATA[<p>Der runtime_error ist weg. Dafür bekomme ich jetzt bei:</p>
<pre><code class="language-cpp">buffer.reserve(mindest_groesse/groesse() + mindest_groesse%groesse() == 0 ? 0 : groesse);
</code></pre>
<p>Datei.cpp:5o: Fehler: invalid use of member (did you forget the »&amp;« ?)</p>
<p>zu 2.) Alles richtig geschrieben bzw. copy-paste gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801947</guid><dc:creator><![CDATA[Laserandi]]></dc:creator><pubDate>Mon, 02 Nov 2009 00:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Mon, 02 Nov 2009 00:34:28 GMT]]></title><description><![CDATA[<p>da (fast) ganz rechts fehlen noch 2 klammern - eine auf und eine zu ;o)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801948</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 02 Nov 2009 00:34:28 GMT</pubDate></item><item><title><![CDATA[Reply to array inhalt aus klasse in main übergeben on Mon, 02 Nov 2009 08:55:40 GMT]]></title><description><![CDATA[<p>Jo, da hätte ich auch mal alleine darauf kommen können. Jetzt kompiliert es.<br />
DANKE.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802005</guid><dc:creator><![CDATA[Laserandi]]></dc:creator><pubDate>Mon, 02 Nov 2009 08:55:40 GMT</pubDate></item></channel></rss>