<?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 mit random_shuffle()]]></title><description><![CDATA[<p>Hallo zusammen.<br />
Habe folgendes Problem:</p>
<p>Ich habe einen Vector vom Typ einer eigenen Klasse (cSprite), welchen ich erst mit Werten füllen möchte, und dann mit random_shuffle() neu mischen möchte, um eine Art Zufallseffekt für ein Spiel zu bekommen.</p>
<p>Hier mal die ungefähre Vorgehensweise:</p>
<pre><code class="language-cpp">//Größe des Vectors
const int vector_max = 3;

//Der Vector vom Type einer Klasse
vector&lt;CSprite&gt; Objekt(vector_max);

/*
Vector mit Werten füllen...
*/

//Vector neu mischen  -&gt; führt zum Absturz des Programms
random_shuffle(Objekt.begin(), Objekt.end());
</code></pre>
<p>Alles funktioniert gut, nur wenn ich random_shuffle() mit reinnehme, stürzt das Programm immer ab.<br />
Der Debugger sagt was von einem Zugriffsfehler beim Lesen...<br />
Habe es genau so mit einem Vector vom Typ int probiert, was ohne Probleme läuft.</p>
<p>Kann der Vector nicht vom Typ einer Klasse sein, also Instanzen der Klasse beinhalten?<br />
Habe sonst mit Arrays gearbeitet (CSprite Objekt[5]), nur da haben ich ja leider keine Funktion wie random_shuffle()...</p>
<p>Kann mir einer das Problem erklären?<br />
Greife ich auf nicht vorhandene Elemente zu? Eigentlich dürft das nicht der Fall sein, da ich ja mit Objekt.begin() und Objekt.end() arbeite...</p>
<p>MfG<br />
Hundefutter</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184252/problem-mit-random_shuffle</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 16:29:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184252.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jun 2007 15:21:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 15:21:07 GMT]]></title><description><![CDATA[<p>Hallo zusammen.<br />
Habe folgendes Problem:</p>
<p>Ich habe einen Vector vom Typ einer eigenen Klasse (cSprite), welchen ich erst mit Werten füllen möchte, und dann mit random_shuffle() neu mischen möchte, um eine Art Zufallseffekt für ein Spiel zu bekommen.</p>
<p>Hier mal die ungefähre Vorgehensweise:</p>
<pre><code class="language-cpp">//Größe des Vectors
const int vector_max = 3;

//Der Vector vom Type einer Klasse
vector&lt;CSprite&gt; Objekt(vector_max);

/*
Vector mit Werten füllen...
*/

//Vector neu mischen  -&gt; führt zum Absturz des Programms
random_shuffle(Objekt.begin(), Objekt.end());
</code></pre>
<p>Alles funktioniert gut, nur wenn ich random_shuffle() mit reinnehme, stürzt das Programm immer ab.<br />
Der Debugger sagt was von einem Zugriffsfehler beim Lesen...<br />
Habe es genau so mit einem Vector vom Typ int probiert, was ohne Probleme läuft.</p>
<p>Kann der Vector nicht vom Typ einer Klasse sein, also Instanzen der Klasse beinhalten?<br />
Habe sonst mit Arrays gearbeitet (CSprite Objekt[5]), nur da haben ich ja leider keine Funktion wie random_shuffle()...</p>
<p>Kann mir einer das Problem erklären?<br />
Greife ich auf nicht vorhandene Elemente zu? Eigentlich dürft das nicht der Fall sein, da ich ja mit Objekt.begin() und Objekt.end() arbeite...</p>
<p>MfG<br />
Hundefutter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304981</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:21:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 15:32:05 GMT]]></title><description><![CDATA[<p>Gibts evtl Probleme beim Kopieren von deinen CSprite Objekten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304994</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:32:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 15:34:59 GMT]]></title><description><![CDATA[<p>was steht denn bei</p>
<pre><code class="language-cpp">/*
Vector mit Werten füllen...
*/
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304998</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:34:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 15:51:35 GMT]]></title><description><![CDATA[<p>Naja, bei dem Füllen der Werte passiert Folgendes, für verschiedene Indizes des Vectors. Kann euch ein Beispiel posten, weiß nicht, wie viel ihr damit anfangen könnt...</p>
<pre><code class="language-cpp">//Objekt 1
//Textur laden
for(int i=0;i&lt;50;i++)
{
	sprintf(Filename,&quot;./Sprites/Objekt/00%d.png&quot;,i+1);
	Objekt[0].AddTexture(Filename);
}

//Bewegungsrichtung festlegen
Objekt[0].Set_direction(RIGHT);

//Position u Schrittgröße setzen
Objekt[0].SetPosition(200,600);
Objekt[0].SetStep(1.5,2);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1305012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305012</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Wed, 13 Jun 2007 15:51:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 16:28:39 GMT]]></title><description><![CDATA[<p>Die Frage hier ist eher, was ist CSprite und hat/braucht diese Klasse einen CopyCtor.<br />
random_shuffle muß beim Umsortieren laufend umkopieren und wenn da was im Argen liegt, knallt es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305040</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 13 Jun 2007 16:28:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 16:49:50 GMT]]></title><description><![CDATA[<p>Der Konstraktor der Klasse initialisiert nur ein paar Member-Variablen...<br />
Einen Kopier-Konstruktor habe ich eigentlich nicht....</p>
<pre><code class="language-cpp">// Konstruktor - Initialisierungen
CSprite::CSprite(void)
{
    m_Rotation = 0;

    m_StepX    = 0;
    m_StepY    = 0;

    m_Width    = 0;
    m_Height   = 0;

    m_AnimationSpeed = 0;
    m_AnimationDelay = 0;
    m_CurrentImage   = 0;
    m_animation = false;
    m_animzaehler = 1;

    m_lpDevice = NULL;                  
    m_lpSprite = NULL;
}
</code></pre>
<p>Kann es deshalb also zu Fehlern kommen, weil die Variablen neu gesetzt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305049</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Wed, 13 Jun 2007 16:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 17:14:19 GMT]]></title><description><![CDATA[<p>Hundefutter schrieb:</p>
<blockquote>
<p>Einen Kopier-Konstruktor habe ich eigentlich nicht....</p>
</blockquote>
<p>Wenn das Zeiger sind, solltest du vermutlich einen brauchen <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>
<p>Hundefutter schrieb:</p>
<blockquote>
<pre><code class="language-cpp">m_lpDevice = NULL;                  
    m_lpSprite = NULL;
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1305062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305062</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 13 Jun 2007 17:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 18:38:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// Zeiger auf das Direct3D Device
LPDIRECT3DDEVICE9 m_lpDevice;

// Zeiger auf das ID3DXSprite-Objekt
LPD3DXSPRITE m_lpSprite;
</code></pre>
<p>Sind also Zeiger...<br />
Wie muss ich das dann mit dem Kopier-Konstruktor lösen?<br />
Habe bis jetzt noch nie damit gearbeitet....</p>
<p>Kann ich den dann auch einfach definieren und der wird dann automatisch bei einem Kopiervorgang aufgerufen, genau wie der Konstruktor beim Erstellen?<br />
Habe dazu folgenden Syntax gefunden:</p>
<blockquote>
<p>Klassenname(const Klassenname&amp;)</p>
</blockquote>
<p>Ist das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305099</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Wed, 13 Jun 2007 18:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 18:41:40 GMT]]></title><description><![CDATA[<p>Naja, habe mich da jetzt ein bisschen eingelesen, weiß also ungefähr, wie der Kopierkonstruktor jetzt funktioniert, also wann er aufgerufen wird, usw..<br />
Nur wie kann ich den jetzt nutzen, um das oben genannte Problem zu beheben?<br />
Stehe gerade noch etwas auf dem Schlauch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305110</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Wed, 13 Jun 2007 18:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 18:52:39 GMT]]></title><description><![CDATA[<p>Das ganze Objekt <strong>korrekt</strong> kopieren. D.h. keine Flache kopie erstellen. Es sei denn du <strong>willst</strong> den Speicher auf den gezeigt wird unter den Objekten teilen, in dem Fall wär ein Shared-Pointer ganz nett, da du sonst gefahr läufst dangling pointers zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305120</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 13 Jun 2007 18:52:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 19:01:36 GMT]]></title><description><![CDATA[<p>Also muss ich eine sogenannte &quot;deep-copy&quot; erstellen, also muss ich doch einfach den Kopierkonstruktor so definieren, dass in diesem das Objekt per Hand kopiert wird.<br />
Ist das soweit richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305127</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Wed, 13 Jun 2007 19:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Wed, 13 Jun 2007 21:24:12 GMT]]></title><description><![CDATA[<p>Das Device wirst du nicht &quot;deep&quot; kopieren können und auch nicht wollen.<br />
Das D3DXSPRITE ... keine Ahnung ob man das kopieren kann. Solle man aber wohl ...</p>
<p>Ich würde eher die Klasse non-copyable machen, und boost::shared_ptr&lt;CSprite&gt; in den vector reinstecken anstelle von CSprite.</p>
<p>Wenn deine CSprite Klasse wirklich kopierbar sein soll, dann solltest du AddRef() auf das Device aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305237</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 13 Jun 2007 21:24:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Thu, 14 Jun 2007 04:44:05 GMT]]></title><description><![CDATA[<p>Von der Klasse noncopyable habe ich bei meinen Recherchen auch erfahren. Werde es mal damit ausprobieren..<br />
Danke für die Hilfen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305297</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Thu, 14 Jun 2007 04:44:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Thu, 14 Jun 2007 07:44:38 GMT]]></title><description><![CDATA[<p>noncopyable ist keine Klasse sondern eine Eigenschaft einer Klasse. Um das zu erreichen, genügt es eigentlich den CopyCtor und den Assignment-operator private zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305391</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 14 Jun 2007 07:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Thu, 14 Jun 2007 09:23:11 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>noncopyable ist keine Klasse sondern eine Eigenschaft einer Klasse. Um das zu erreichen, genügt es eigentlich den CopyCtor und den Assignment-operator private zu machen.</p>
</blockquote>
<p>In der Tat bietet boost eine Klasse mit Namen &quot;noncopyable&quot; an. Also ist es, unter anderem, eine Klasse! <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/1305472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305472</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 14 Jun 2007 09:23:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Thu, 14 Jun 2007 09:30:41 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>In der Tat bietet boost eine Klasse mit Namen &quot;noncopyable&quot; an. Also ist es, unter anderem, eine Klasse! <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>
</blockquote>
<p>Genau und der Konstruktor ist auch eine Klasse: class Konstruktor {};</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305476</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Thu, 14 Jun 2007 09:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Thu, 14 Jun 2007 09:54:00 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>David_pb schrieb:</p>
<blockquote>
<p>In der Tat bietet boost eine Klasse mit Namen &quot;noncopyable&quot; an. Also ist es, unter anderem, eine Klasse! <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>
</blockquote>
<p>Genau und der Konstruktor ist auch eine Klasse: class Konstruktor {};</p>
</blockquote>
<p>Stimmt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305496</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 14 Jun 2007 09:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Thu, 14 Jun 2007 11:19:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Ihr_seid_doof {} Jawoll;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1305582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305582</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Jun 2007 11:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit random_shuffle() on Fri, 15 Jun 2007 06:54:19 GMT]]></title><description><![CDATA[<p>Schöne Diskussionen, ob noncopyable eine Klasse ist oder nicht, ich hatte da wirklich eine Klasse noncopyable gemeint, so dass ich diese Klasse erstelle, den Kopierkonstruktur als privat deklariere und dann meinen Klasse von der noncopyable Klasse erben lassen. So verhindere ich dann, dass das Objekt meiner Klasse kopiert werden kann.<br />
Da in der Basisklasse (noncopyable) dann dieser Kopierkonstruktor deklariert ist, wird vom Compiler bei meiner Klasse kein Kopierkonstruktor mehr erzeugt und der Kopierkonstruktor der Basisklasse kann nicht aufgerufen werden, da er als privat deklariert wurde...<br />
So eine Klasse ist wie oben schon genannt unter Boost zu finden...<br />
MfG<br />
Hundefutter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306248</guid><dc:creator><![CDATA[Hundefutter]]></dc:creator><pubDate>Fri, 15 Jun 2007 06:54:19 GMT</pubDate></item></channel></rss>