<?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[[Solved]Standard Container mit eigenen Objekten]]></title><description><![CDATA[<p>Guten Tag,<br />
ich komme eigentlich aus dem Java Bereich und wollte mich an C++ heranwagen....</p>
<p>folgendes Problem :<br />
ich habe eine Klasse 'Prod' erstellt und wollte in der main instanziieren und dieses Objekt dann in einem std::vector (oder auch list oder sonst was) reinhauen.</p>
<p>ich hatte es bisher nur mit den standardtypen int,double,char etc getan aber irgendwie will das bei eigenen Objekten nicht klappen ... bei der Ausgabe kommt dann nur garbage raus, als ob sich der vector verzeigert oder so.</p>
<p>(frage nebenbei: macht vector nur einen Zeiger auf das objekt oder erstellt er intern eine kopie?)<br />
main.cpp : (nicht stören lassen von der for schleife, bin noch c++ anfänger und kenn noch nicht alle functionalitäten, aber das mit dem objekt ist mir erstmal wichtiger)</p>
<pre><code class="language-cpp">char c [100];
    vector&lt;Prod&gt; qu;

    cout &lt;&lt; &quot;Bitte geben Sie eine Produktion der Form A -&gt; BC oder A -&gt; a ein.\n&quot;;

    char word [100];
    while (cin &gt;&gt; word &amp;&amp; word[0] !='0') {
        for (int i=0;i&lt;sizeof(word)-3;i++) {
            c[i] = word[i+3];
        }
        qu.push_back(Prod(word[0],c));
    }

    cout&lt;&lt; qu.front().getSymbol();
</code></pre>
<p>Prod.h</p>
<pre><code class="language-cpp">class Prod {
public:
    Prod();
    Prod(char s, char c []);
    Prod(const Prod&amp; orig);
    virtual ~Prod();
    char getFront();
    char getSymbol();
private:
     char symbol;
     char front;
};
</code></pre>
<p>Prod.cpp</p>
<pre><code class="language-cpp">Prod::Prod(char s , char c []) {
    this-&gt;symbol = s;
    this-&gt;front = c[0];
}

char Prod::getFront() {
    return this-&gt;front;
}

char Prod::getSymbol() {
    return this-&gt;symbol;
}
</code></pre>
<p>Also ich habs eigentlich noch ziemlich simple gehalten... aber irgendwie will mein Beispiel nicht funktionieren</p>
<p>ich benutz netbeans c++ plattform mit msys compiler</p>
<p>vielen Dank schonmal im Vorraus<br />
Terry</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288696/solved-standard-container-mit-eigenen-objekten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 18:37:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288696.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Jun 2011 11:11:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 12:42:14 GMT]]></title><description><![CDATA[<p>Guten Tag,<br />
ich komme eigentlich aus dem Java Bereich und wollte mich an C++ heranwagen....</p>
<p>folgendes Problem :<br />
ich habe eine Klasse 'Prod' erstellt und wollte in der main instanziieren und dieses Objekt dann in einem std::vector (oder auch list oder sonst was) reinhauen.</p>
<p>ich hatte es bisher nur mit den standardtypen int,double,char etc getan aber irgendwie will das bei eigenen Objekten nicht klappen ... bei der Ausgabe kommt dann nur garbage raus, als ob sich der vector verzeigert oder so.</p>
<p>(frage nebenbei: macht vector nur einen Zeiger auf das objekt oder erstellt er intern eine kopie?)<br />
main.cpp : (nicht stören lassen von der for schleife, bin noch c++ anfänger und kenn noch nicht alle functionalitäten, aber das mit dem objekt ist mir erstmal wichtiger)</p>
<pre><code class="language-cpp">char c [100];
    vector&lt;Prod&gt; qu;

    cout &lt;&lt; &quot;Bitte geben Sie eine Produktion der Form A -&gt; BC oder A -&gt; a ein.\n&quot;;

    char word [100];
    while (cin &gt;&gt; word &amp;&amp; word[0] !='0') {
        for (int i=0;i&lt;sizeof(word)-3;i++) {
            c[i] = word[i+3];
        }
        qu.push_back(Prod(word[0],c));
    }

    cout&lt;&lt; qu.front().getSymbol();
</code></pre>
<p>Prod.h</p>
<pre><code class="language-cpp">class Prod {
public:
    Prod();
    Prod(char s, char c []);
    Prod(const Prod&amp; orig);
    virtual ~Prod();
    char getFront();
    char getSymbol();
private:
     char symbol;
     char front;
};
</code></pre>
<p>Prod.cpp</p>
<pre><code class="language-cpp">Prod::Prod(char s , char c []) {
    this-&gt;symbol = s;
    this-&gt;front = c[0];
}

char Prod::getFront() {
    return this-&gt;front;
}

char Prod::getSymbol() {
    return this-&gt;symbol;
}
</code></pre>
<p>Also ich habs eigentlich noch ziemlich simple gehalten... aber irgendwie will mein Beispiel nicht funktionieren</p>
<p>ich benutz netbeans c++ plattform mit msys compiler</p>
<p>vielen Dank schonmal im Vorraus<br />
Terry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081564</guid><dc:creator><![CDATA[MrTerry]]></dc:creator><pubDate>Tue, 21 Jun 2011 12:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:21:25 GMT]]></title><description><![CDATA[<p>Hi,<br />
1.) std::vector erstellt intern eine Kopie.<br />
2.) Der Fehler könnte hier liegen:</p>
<pre><code class="language-cpp">qu.push_back(Prod(word[0],c));
</code></pre>
<p>Da erstellst du zwar ganz regulär über deinen Konstruktor dein Objekt, aber anschließen wird dieses temporäre Objekt dann in dein vector <strong>kopiert</strong>, ergo wird dann dein Copy-Constructor aufgerufen, den du uns auch noch zeigen musst <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081569</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:21:25 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:22:41 GMT]]></title><description><![CDATA[<p>Entsteht der &quot;Garbage&quot; vielleicht, weil du glaubst, in Prod::front sei ein String gespeichert?</p>
<p>Grundsätzlich solltest du std::string statt char-Array verwenden, um Strings zu speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081571</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:26:00 GMT]]></title><description><![CDATA[<p>- war leider falsch -</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081572</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:26:54 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p><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/2081574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081574</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:32:42 GMT]]></title><description><![CDATA[<p>erstmal vielen Dank</p>
<p>@kasf</p>
<blockquote>
<p>Da erstellst du zwar ganz regulär über deinen Konstruktor dein Objekt, aber anschließen wird dieses temporäre Objekt dann in dein vector kopiert, ergo wird dann dein Copy-Constructor aufgerufen, den du uns auch noch zeigen musst <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="🙂"
    /></p>
</blockquote>
<p>aha, dass wusste ich nicht, da müsste ich mich kurz belesen (was ich auch sofort tun werde, trotzdem wäre ein beispiel schön <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="🙂"
    /> )</p>
<p>@ rest :<br />
das mit string werd ich gleich ausprobieren, aber ich habe es gerade mit nur chars ausprobiert, was auch nicht funktioniert : Beispiel Ein-/Ausgabe<br />
Eingabe<br />
B-&gt;aC<br />
0</p>
<p>Augabe<br />
Ä</p>
<p>mfG<br />
Terry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081580</guid><dc:creator><![CDATA[MrTerry]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:42:24 GMT]]></title><description><![CDATA[<p>Das Programm (mit deinem geposteten Code)</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

using namespace std;

class Prod {
public:
    Prod(char s, char c []);
    char getFront();
    char getSymbol();
private:
     char symbol;
     char front;
};

Prod::Prod(char s , char c []) {
    this-&gt;symbol = s;
    this-&gt;front = c[0];
}

char Prod::getFront() {
    return this-&gt;front;
}

char Prod::getSymbol() {
    return this-&gt;symbol;
}

int main()
{
char c [100];
    vector&lt;Prod&gt; qu;

    cout &lt;&lt; &quot;Bitte geben Sie eine Produktion der Form A -&gt; BC oder A -&gt; a ein.\n
&quot;;

    char word [100];
    while (cin &gt;&gt; word &amp;&amp; word[0] !='0') {
        for (int i=0;i&lt;sizeof(word)-3;i++) {
            c[i] = word[i+3];
        }
        qu.push_back(Prod(word[0],c));
    }

    cout&lt;&lt; qu.front().getSymbol();
}
</code></pre>
<p>macht das</p>
<blockquote>
<p>Bitte geben Sie eine Produktion der Form A -&gt; BC oder A -&gt; a ein.<br />
B-&gt;aC<br />
0<br />
B</p>
</blockquote>
<p>Wenn bei dir etwas anderes herauskommt liegt es wohl an dem Code, den du <strong>nicht</strong> gepostet hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081584</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:52:26 GMT]]></title><description><![CDATA[<p>hmmm ich hab das ungute gefühl das es nicht am code liegt... ich hatte eignetlich alles relevante kopiert... hier nochmal alles :<br />
Prod.h</p>
<pre><code class="language-cpp">/* 
 * File:   Prod.h
 * Author: Terry
 *
 * Created on 20. Juni 2011, 20:49
 */

#ifndef PROD_H
#define	PROD_H

#include&lt;queue&gt;
#include&lt;string&gt;
class Prod {
public:
    Prod();
    Prod(char s, char c);
    Prod(const Prod&amp; orig);
    virtual ~Prod();
    char getFront();
    char getSymbol();
private:
     char symbol;
     char front;
};

#endif	/* PROD_H */
</code></pre>
<p>Prod.cpp</p>
<pre><code class="language-cpp">/* 
 * File:   Prod.cpp
 * Author: Terry
 * 
 * Created on 20. Juni 2011, 20:49
 */

#include &quot;Prod.h&quot;
#include &lt;iostream&gt;
Prod::Prod() {
}

Prod::Prod(char s , char c ) {
    this-&gt;symbol = s;
    this-&gt;front = c;
}

Prod::Prod(const Prod&amp; orig) {
 // hier müsste diese Copsache rein oder?
 // hatte versucht this-&gt;symbol = orig.getSymbol();   
 // und äquivalent für front aber das wollte mir netbeans nicht abkaufen
 // was ist der fehler ? 
}

char Prod::getFront() {
    return this-&gt;front;
}

char Prod::getSymbol() {
    return this-&gt;symbol;
}

Prod::~Prod() {
}
</code></pre>
<p>und die main.cpp</p>
<pre><code class="language-cpp">/* 
 * File:   main.cpp
 * Author: Terry
 *
 * Created on 20. Juni 2011, 23:22
 */

#include &lt;iostream&gt;
#include &quot;Prod.h&quot;
#include &lt;vector&gt;
#include &lt;string&gt;
using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    char c [100];
    vector&lt;Prod&gt; qu;

    cout &lt;&lt; &quot;Bitte geben Sie eine Produktion der Form A -&gt; BC oder A -&gt; a ein.\n&quot;;

    char word [100];
    while (cin &gt;&gt; word &amp;&amp; word[0] !='0') {
        for (int i=0;i&lt;sizeof(word)-3;i++) {
            c[i] = word[i+3];
        }
        qu.push_back((Prod)Prod(word[0],c[0]));
    }

    cout&lt;&lt; qu.front().getSymbol();
    return 0;
}
</code></pre>
<p>so das ist 100% des Codes der bei mir nicht funzt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>mfG<br />
Terry</p>
<p>EDIT :<br />
der copy construktor scheints gewesen zu sein....ich muss aber kurz weiter testen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081588</guid><dc:creator><![CDATA[MrTerry]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:50:38 GMT]]></title><description><![CDATA[<p>Ein Copy-Constructor wird aufgerufen, wenn ein Objekt vom Typ A in ein anderes Objekt vom Typ A kopiert wird. Und dies geschieht in deinem Falle beim push_back, dort wird dein temporäres Objekt &quot;Prod(word[0],c)&quot; in ein Prod-Objekt vom vector kopiert.</p>
<p>Ein Copy-Constructor sieht so aus:</p>
<pre><code class="language-cpp">ClassName (const ClassName&amp; obj);
</code></pre>
<p>Also in deinem Falle ist das:</p>
<pre><code class="language-cpp">Prod(const Prod&amp; orig);
</code></pre>
<p>Wenn du ihn leer implementiert haben solltest, also:</p>
<pre><code class="language-cpp">Prod::Prod(const Prod&amp; orig)
{ }
</code></pre>
<p>dann ist das dein Fehler, da du da die Elemente aus orig in deinen eigenen Container kopieren musst, also:</p>
<pre><code class="language-cpp">Prod::Prod(const Prod&amp; orig)
{ 
    front = orig.front;
    symbol = orig.symbol;
}
</code></pre>
<p>Da dies aber nur PODs sind, also einfach Datentypen, brauchst du den Copy-Constructor (CC) nicht zu implementieren. Das übernimmt dein Compiler für dich. Würdest du aber dynamische Resources (zB Zeiger) in der Klasse haben, müsstest du einen CC implementieren. Ansonsten würde der vom Compiler erzeugte CC den Zeiger einfach kopieren und beide Objekte hätten einen Zeiger auf das selbe Objekt, was nicht gewünscht ist. In diesem Falle müsstest du den CC selbst implementieren und eine Kopie des hinterm Zeiger liegenden Objekts für das aktuelle Objekt selbst erstellen.</p>
<p>Aber vergiss einfach was ich gesagt habe und benutz einfach die schönen Standardcontaier, wie std::string und std::vector und du brauchst den Zeiger-Quatsch nicht <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081590</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:50:38 GMT</pubDate></item><item><title><![CDATA[Reply to [Solved]Standard Container mit eigenen Objekten on Tue, 21 Jun 2011 11:56:23 GMT]]></title><description><![CDATA[<p>danke KasF hab es nach 2 anläufen doch (sogar selbst) hinbekommen <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="🙂"
    /><br />
es scheint auch zu funktionieren... <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="🙂"
    /> (vorerst) <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>trotzdem danke nochmal das du es nochmal aufgeschrieben hast <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="🙂"
    /><br />
vielen Dank! auch an die anderen<br />
liebe Grüße<br />
Terry</p>
<p>aso und der nachsatz das der compiler das übernimmt, ich nutze msys ...der scheint es nicht zu übernehmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081592</guid><dc:creator><![CDATA[MrTerry]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:56:23 GMT</pubDate></item></channel></rss>