<?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[[gelöst] Variable außerhalb des Gültigkeitsbereiches erzeugen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein Problem (klar *g*).<br />
Ich müsste anhand von einem Werten einen bestimmten Zeiger definieren. Die Werte sind in einem enum definiert. Folgender Code zeigt was ich brauche und was ich damit erreichen möchte:</p>
<pre><code class="language-cpp">enum Typen {
  Gitarre = 1,
  Klavier,
  Schlagzeug,
  Posaune,
  Orgel // und noch viel Instrumente mehr....
};
void func(const Typen&amp; was, wxPanel* ausgabepanel)
{
  switch (was)
  {
  case Gitarre: InstrumentGitarre *inst = new InstrumentGitarre(); break;
// error C2360: Initialisierung von 'inst' durch 'case'-Marke übersprungen
  case Klavier:
    {
      InstrumentKlavier *inst = new InstrumentKlavier();
// Bei Zugriff inst-&gt;GetName(): error C2065: 'inst': nichtdeklarierter Bezeichner
    }
    break;
  case Schlagzeug:
    {
      InstrumentSchlagzeug ::*inst = new InstrumentSchlagzeug();
// error C2657: 'InstrumentSchlagzeug ::*' zu Beginn einer Anweisung gefunden (fehlt die Typangabe?)
    }
    break;
  case Posaune:
    {
      InstrumentPosaune* ::inst = new InstrumentPosaune();
// error C2657: 'InstrumentPosaune::*' zu Beginn einer Anweisung gefunden (fehlt die Typangabe?)
    }
  }
  if (ausgabepanel!=NULL)
  {
    // ... xx und xx errechnen
    wxStaticText *mytext = new wxStaticText(ausgabepanel, wxID_ANY, inst-&gt;GetName(), wxPoint(xx,yy));
  }
}
</code></pre>
<p>Wie kann ich den Zeiger *inst je nach Variablenwert mit der richtigen Klasse erzeugen, wenn der ::-Operator nicht funktionier?</p>
<p>Die Klassen haben alle die Klasse InstrumentAlle als public vererbt.</p>
<p>Danke,<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241559/gelöst-variable-außerhalb-des-gültigkeitsbereiches-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 10:54:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241559.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 May 2009 13:12:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Variable außerhalb des Gültigkeitsbereiches erzeugen on Fri, 22 May 2009 13:48:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein Problem (klar *g*).<br />
Ich müsste anhand von einem Werten einen bestimmten Zeiger definieren. Die Werte sind in einem enum definiert. Folgender Code zeigt was ich brauche und was ich damit erreichen möchte:</p>
<pre><code class="language-cpp">enum Typen {
  Gitarre = 1,
  Klavier,
  Schlagzeug,
  Posaune,
  Orgel // und noch viel Instrumente mehr....
};
void func(const Typen&amp; was, wxPanel* ausgabepanel)
{
  switch (was)
  {
  case Gitarre: InstrumentGitarre *inst = new InstrumentGitarre(); break;
// error C2360: Initialisierung von 'inst' durch 'case'-Marke übersprungen
  case Klavier:
    {
      InstrumentKlavier *inst = new InstrumentKlavier();
// Bei Zugriff inst-&gt;GetName(): error C2065: 'inst': nichtdeklarierter Bezeichner
    }
    break;
  case Schlagzeug:
    {
      InstrumentSchlagzeug ::*inst = new InstrumentSchlagzeug();
// error C2657: 'InstrumentSchlagzeug ::*' zu Beginn einer Anweisung gefunden (fehlt die Typangabe?)
    }
    break;
  case Posaune:
    {
      InstrumentPosaune* ::inst = new InstrumentPosaune();
// error C2657: 'InstrumentPosaune::*' zu Beginn einer Anweisung gefunden (fehlt die Typangabe?)
    }
  }
  if (ausgabepanel!=NULL)
  {
    // ... xx und xx errechnen
    wxStaticText *mytext = new wxStaticText(ausgabepanel, wxID_ANY, inst-&gt;GetName(), wxPoint(xx,yy));
  }
}
</code></pre>
<p>Wie kann ich den Zeiger *inst je nach Variablenwert mit der richtigen Klasse erzeugen, wenn der ::-Operator nicht funktionier?</p>
<p>Die Klassen haben alle die Klasse InstrumentAlle als public vererbt.</p>
<p>Danke,<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714212</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Fri, 22 May 2009 13:48:30 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Variable außerhalb des Gültigkeitsbereiches erzeugen on Fri, 22 May 2009 13:29:37 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void func(const Typen&amp; was, wxPanel* ausgabepanel)
{
  InstrumentAlle* inst = 0;

  switch (was)
  {
  case Gitarre: inst = new InstrumentGitarre(); break;
  case Klavier: inst = new InstrumentKlavier(); break;
  case Schlagzeug: inst = new InstrumentSchlagzeug(); break;
  case Posaune: inst = new InstrumentPosaune(); break;
  }
  if (ausgabepanel!=NULL)
  {
    // ... xx und xx errechnen
    wxStaticText *mytext = new wxStaticText(ausgabepanel, wxID_ANY, inst-&gt;GetName(), wxPoint(xx,yy));
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1714228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714228</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 22 May 2009 13:29:37 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Variable außerhalb des Gültigkeitsbereiches erzeugen on Fri, 22 May 2009 13:48:16 GMT]]></title><description><![CDATA[<p>Danke schön,<br />
das zeigt schon mal wie es bei mir geht und gelöst hab ich es damit auch.</p>
<p>Neugierig bin ich trotzdem noch auf die Frage:<br />
Gibt es eine Möglichkeit in einem anderen Gültigkeitsbereich eine Variable zu erzeugen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714244</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Fri, 22 May 2009 13:48:16 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Variable außerhalb des Gültigkeitsbereiches erzeugen on Fri, 22 May 2009 13:58:08 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit in einem anderen Gültigkeitsbereich eine Variable zu erzeugen?</p>
</blockquote>
<p>Eine Variable selbst wird immer beim Zeitpunkt ihrer Definition &quot;erzeugt&quot; (erhält Speicher zugeordnet).</p>
<p>Eine Variable ist in dem Scope der Deklaration und untergeordneten Scopes sichtbar (sofern sie dort nicht neu deklariert wurde). Das heisst, du kannst nur so direkt auf sie zugreifen. Mittels Zeigern und Referenzen kannst du Variablen aber nahezu überall hindelegieren, zum Beispiel an Funktionen.</p>
<p>Insofern kann man auch Objekte auch weit entfernt von der Deklaration erzeugen, als man mit &quot;erzeugen&quot; nicht die Definition der Variable, sondern die Instanziierung des Objekts meint. Und das geht beispielsweise auch verspätet mit <code>new</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714253</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 22 May 2009 13:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Variable außerhalb des Gültigkeitsbereiches erzeugen on Fri, 22 May 2009 13:58:09 GMT]]></title><description><![CDATA[<p>Ja, aber die Namen können diese Grenzen nicht überschreiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714254</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 22 May 2009 13:58:09 GMT</pubDate></item></channel></rss>