<?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[Eingabe eines Strings bei dynamischen Objekt]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mein erster Beitrag und gleich ein Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Und zwar folgendes, ich habe eine Klasse und möchte ein Attribut eingeben. Die Instanzen der Klasse werden dynamisch erzeugt. Eine Stringeingabe funktioniert aber nicht. Wenn die Instanz statisch erzeugt wird allerdings schon.</p>
<p>Hier mal der Code aufs minimale reduziert</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;

using namespace std;

class PRODUKT
{
    private:
        string name;
    public:
        void set_name(){cout &lt;&lt; &quot;Bitte Namen eingeben: &quot;; cin&gt;&gt;name;}   //auch mit getline(cin, name); getestet
};

int main()
{
    PRODUKT X;
    X.set_name();   //funktioniert

    PRODUKT* P;
    P-&gt;set_gruppe();    //hier stürzt das Programm ab

    system(&quot;PAUSE&quot;);
    return 1;
}
</code></pre>
<p>Ich hoffe mal, ihr könnt mir helfen <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/topic/324832/eingabe-eines-strings-bei-dynamischen-objekt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 10:52:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324832.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Apr 2014 19:19:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:20:27 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mein erster Beitrag und gleich ein Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Und zwar folgendes, ich habe eine Klasse und möchte ein Attribut eingeben. Die Instanzen der Klasse werden dynamisch erzeugt. Eine Stringeingabe funktioniert aber nicht. Wenn die Instanz statisch erzeugt wird allerdings schon.</p>
<p>Hier mal der Code aufs minimale reduziert</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;

using namespace std;

class PRODUKT
{
    private:
        string name;
    public:
        void set_name(){cout &lt;&lt; &quot;Bitte Namen eingeben: &quot;; cin&gt;&gt;name;}   //auch mit getline(cin, name); getestet
};

int main()
{
    PRODUKT X;
    X.set_name();   //funktioniert

    PRODUKT* P;
    P-&gt;set_gruppe();    //hier stürzt das Programm ab

    system(&quot;PAUSE&quot;);
    return 1;
}
</code></pre>
<p>Ich hoffe mal, ihr könnt mir helfen <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/2392643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392643</guid><dc:creator><![CDATA[realshadow]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:20:27 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:23:02 GMT]]></title><description><![CDATA[<p>PRODUKT* P = new PRODUKT; // Es ist immer schön, ein Objekt zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392644</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:23:42 GMT]]></title><description><![CDATA[<p>In deiner markierten Quelltextzeile greifst du an eine zufällige Stelle im Arbeitsspeicher zu. Das mag dein Betriebssystem aber nicht und lässt das Programm abstürzen.<br />
Du musst erst mit new eine Instanz erzeugen. Aber nicht vergessen, zu jedem new gehört auch ein delete. Oder du verwendest unique_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392645</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:28:51 GMT]]></title><description><![CDATA[<p>Ach klar... vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Dann hab ich noch ein zweites Problem, und zwar möchte ich es als dynamisches Array haben (nicht Liste)</p>
<pre><code>PRODUKT *P[30];
    P[0] = new PRODUKT;
</code></pre>
<p>Ist das so richtig? Also die Anzahl der Instanzen wird natürlich kontrolliert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392646</guid><dc:creator><![CDATA[realshadow]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:31:47 GMT]]></title><description><![CDATA[<p>realshadow schrieb:</p>
<blockquote>
<p>Ach klar... vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Dann hab ich noch ein zweites Problem, und zwar möchte ich es als dynamisches Array haben (nicht Liste)</p>
</blockquote>
<pre><code>std::vector&lt;PRODUKT&gt; container;
// oder falls du unbedingt Pointer brauchst, was du nur brauchst wenn Polymorphie im Spiel ist:
std::vector&lt;std::unique_ptr&lt;Product&gt;&gt; container;
</code></pre>
<p>Und wieso UPPERCASE?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392647</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:33:23 GMT]]></title><description><![CDATA[<p>Du hast kein Objekt erzeugt, sondern nur einen Zeiger da drauf. Der Zeiger zeigt irgendwo ins Nirvana, wenn du den dereferenzierst, stuerzt das Programm daher ab.</p>
<p>Problem ist hier weniger die Stringeingabe, sondern, wie man in C++ dynamisch Objekte erzeugt. Das normale Vorgehen waere hier, die Objekte in einer Containerklasse wie std::vector (es gibt noch viele andere) zu packen, dann loest sich das Problem ganz von alleine. Wenn es etwas spezieller wird, dann ist eventuell auch einer der smart_pointer aus der Standardbibliothek und die Objekterzeugung dann mittels new (oder besser: make_shared/make_unique). Ein Smartpointer ist aber vermutlich eher nicht das, was du brauchst, ich wollte es bloss erwaehnen.</p>
<p>Damit bewaffnet, sollten sich deine Probleme von alleine loesen.</p>
<p>Noch ein Kritikpunkt: Dein Klassendesign ist nicht so toll. Separation of concerns wird verletzt. Ein Produkt hat sich nicht darum zu kuemmern, wie es einen Namen bekommt. Es hat einen Namen, den muss es sich nicht besorgen, den bekommt es. Und zwar bei der Erstellung, es sei denn, es kann auch sinnvolle Produkte ohne Namen geben. Jedenfalls hat ein Objekt nach seiner Erstellung voll einsatzfaehig zu sein und nicht weiterer Initialisierungsfunktionen zu beduerfen (die koennten naemlich vergessen werden). Es mag ein paar ganz spezielle Ausnahmen geben, aber das liegt hier sicherlich nicht vor. Verpass deinem Produkt einen Konstruktor, ueber den es seinen Namen erhaelt.</p>
<p>edit: Viel zu langsam...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392648</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:35:43 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Noch ein Kritikpunkt: Dein Klassendesign ist nicht so toll. Separation of concerns wird verletzt. Ein Produkt hat sich nicht darum zu kuemmern, wie es einen Namen bekommt. Es hat einen Namen, den muss es sich nicht besorgen, den bekommt es. Und zwar bei der Erstellung, es sei denn, es kann auch sinnvolle Produkte ohne Namen geben. Jedenfalls hat ein Objekt nach seiner Erstellung voll einsatzfaehig zu sein und nicht weiterer Initialisierungsfunktionen zu beduerfen (die koennten naemlich vergessen werden). Es mag ein paar ganz spezielle Ausnahmen geben, aber das liegt hier sicherlich nicht vor. Verpass deinem Produkt einen Konstruktor, ueber den es seinen Namen erhaelt.</p>
<p>edit: Viel zu langsam...</p>
</blockquote>
<p>Konstruktor ist vorhanden, hab ich nur rausgekürzt <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>Wenn es für alle Felder des Arrays ein new PRODUCT gibt, ist es dann nicht möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392649</guid><dc:creator><![CDATA[realshadow]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:35:43 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:40:23 GMT]]></title><description><![CDATA[<p>realshadow schrieb:</p>
<blockquote>
<p>Wenn es für alle Felder des Arrays ein new PRODUCT gibt, ist es dann nicht möglich?</p>
</blockquote>
<p>Was ist dann nicht möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392651</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:40:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:42:39 GMT]]></title><description><![CDATA[<p>Wenn es für alle Felder des Arrays ein new PRODUCT gibt, ist es dann möglich?</p>
<p>Also ob es dann funktioniert?</p>
<p>Also ich brauche maximal 30 dynamisch erzeugte Instanzen, muss auf jede Zugreifen und doppelt verkettete Listen kann ich noch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392652</guid><dc:creator><![CDATA[realshadow]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 19:50:12 GMT]]></title><description><![CDATA[<p>Wenn du max. 30 dynamische Objekte willst, machst du es so:</p>
<pre><code>PRODUKT *P = new PRODUKT[30];
//...
delete[] p;
</code></pre>
<p>wenn du sowas brauchst, ist aber Nathans Lösung die richtige.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392653</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 03 Apr 2014 19:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 20:00:24 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>Wenn du max. 30 dynamische Objekte willst, machst du es so:</p>
<pre><code>PRODUKT *P = new PRODUKT[30];
//...
delete[] p;
</code></pre>
<p>wenn du sowas brauchst, ist aber Nathans Lösung die richtige.</p>
</blockquote>
<p>Danke, wieso muss ich dann aber mit P[x].set_name() zugreifen und nicht mehr P[x]-&gt;set_name()? Bei Zeigern muss man doch per -&gt; zugreifen?<br />
Das ist auch bei</p>
<pre><code>Produkt *P[30];
P[1]=new PRODUKT;
P[1]-&gt;set_name();
</code></pre>
<p>Also ich habs zumindest so gelernt, bei Zeigern auf Objekte, immer mit -&gt; auf Methoden zugreifen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392655</guid><dc:creator><![CDATA[realshadow]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 20:28:13 GMT]]></title><description><![CDATA[<p>&quot;-&gt;&quot; musst du nehmen, wenn sich links davon ein Zeiger auf ein Objekt befindet. &quot;.&quot; nimmst du, wenn sich links davon ein Objekt befindet. &quot;[]&quot; bewirkt eine Dereferenzierung. Wenn du nun den Zeiger dereferenzierst, landest du bei einem PRODUKT-Objekt, also steht links ein Objekt, also muss der &quot;.&quot; her.</p>
<p>Ja, anders sieht es aus, wenn du jedes Objekt einzlen dynamisch erzeugst. Dann hast du 30 Zeiger und 30 Objekte. Wenn du hier dann den &quot;[]&quot; anwendest, landest du nicht sofort bei einem Objekt, sondern erst bei einem Zeiger, darum brauchst du &quot;-&gt;&quot;.</p>
<p>Also in dem einen Fall hast du 30 Zeiger und 30 Objekte, in dem anderen Fal hast du 1 Zeiger und 30 Objeke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392667</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 20:34:46 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>&quot;-&gt;&quot; musst du nehmen, wenn sich links davon ein Zeiger auf ein Objekt befindet. &quot;.&quot; nimmst du, wenn sich links davon ein Objekt befindet. &quot;[]&quot; bewirkt eine Dereferenzierung. Wenn du nun den Zeiger dereferenzierst, landest du bei einem PRODUKT-Objekt, also steht links ein Objekt, also muss der &quot;.&quot; her.</p>
<p>Ja, anders sieht es aus, wenn du jedes Objekt einzlen dynamisch erzeugst. Dann hast du 30 Zeiger und 30 Objekte. Wenn du hier dann den &quot;[]&quot; anwendest, landest du nicht sofort bei einem Objekt, sondern erst bei einem Zeiger, darum brauchst du &quot;-&gt;&quot;.</p>
<p>Also in dem einen Fall hast du 30 Zeiger und 30 Objekte, in dem anderen Fal hast du 1 Zeiger und 30 Objeke.</p>
</blockquote>
<p>Alles klar - vielen Dank!</p>
<p>ist mit PRODUKT *P = new PRODUKT[30]; die Instanzierung dann noch dynamisch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392671</guid><dc:creator><![CDATA[realshadow]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 20:35:46 GMT]]></title><description><![CDATA[<p>Vielleicht sollte man auch noch folgendes klarstellen:</p>
<pre><code>new PRODUKT[30]
</code></pre>
<p>Bedeutet: Array von 30 PRODUKT-Objekten im dynamischen Speicher.</p>
<pre><code>PRODUKT *P[30];
</code></pre>
<p>Bedeutet: Array von 30 PRODUKT-Zeigern im automatischen Speicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392672</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 20:36:21 GMT]]></title><description><![CDATA[<p>OK, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392673</guid><dc:creator><![CDATA[realshadow]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Thu, 03 Apr 2014 20:54:39 GMT]]></title><description><![CDATA[<p>Warum wird hier new fuer Felder empfohlen? Denkt nicht mal einer an die <s>Kinder</s> vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392679</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Apr 2014 20:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eingabe eines Strings bei dynamischen Objekt on Fri, 04 Apr 2014 10:30:31 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Warum wird hier new fuer Felder empfohlen? Denkt nicht mal einer an die <s>Kinder</s> vector?</p>
</blockquote>
<p>Ihm wurde gesagt, dass Nathans Lösung der richtige Weg ist. Darauf ist er aber nicht eingegangen. Ich denke, es handelt sich hier um &quot;mach es so wie dein Lehrer es macht&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392750</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 04 Apr 2014 10:30:31 GMT</pubDate></item></channel></rss>