<?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[Frage zu Objekten, Referenzen und Vererbung]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich suche gerade einen Fehler, der sehr mysteriös ist, leider habe ich gerad den Source nicht zur Hand, kann die Klassen aber ggf. nachliefern.</p>
<p>Folgende Konstellation in Kurzform, damit der Post nicht zu lang wird:</p>
<p>Abstrakte nicht-statische Basisklasse mit pure virtual DTor und privatem CTor.<br />
Diese Klasse hat ein nicht-statisches protected Attribute vom Typ einer Struktur (ich gehr hier davon aus, dass nun alle Objekte aller abgeleiteten Klassen eine eigene Instanz dieser Struktur haben und zwar private). Zudem hat diese Basisklasse eine public-Methode, welche die Struktur zurückliefert.<br />
Eine abgeleitete Klasse A und eine abgeleitete Klasse B. A hat als Attribute eine list von Zeigern auf Objekte von B.<br />
Die Konstruktoren von A und B rufen in ihrer Initialisierung den CTor der abstrakten Basisklasse auf, dieser verlangt einen string und eine Zahl (weiss den Typ gerade nicht auswendig, die spielt hier auch keine Rolle), welche in das Struktur-Attribute eingetragen werden. Zusätzlich wird noch der Typ übergeben, der ebenfalls in die Struktur übernommen wird. Die abgeleiteten Klassen A und B übergeben unterschiedliche Typen.<br />
Es gibt zudem eine Klasse C, die eine list von Zeigern der Klasse A als Attribute hat. Es gibt noch ein paar friend-Beziehungen mit anderen Klassen, aber soweit ich weiss nicht zw. A und B. Denke aber, dass friend hier nicht der Verursacher ist!?</p>
<p>In der Programmklasse wird nun eine Instanz von A erzeugt (beispielhaft):</p>
<pre><code class="language-cpp">A a(&quot;eins&quot;, 0);

// hier erzeugt die Testausgabe des String aus der Struktur von a: eins

B b1(&quot;zwei&quot;, 0);

// hier erzeugt die Testausgabe des String aus der Struktur von a: eins

B b2(&quot;drei&quot;, 0);

// ab hier erzeugt die Testausgabe des String aus der Struktur von a: drei - Wieso? Das ist doch absolut unverständlich! Wie kann b2 a ändern? Und warum nicht schon b1?

a.add(b1);    // für das hinzufügen zur list

// hier erzeugt die Testausgabe des String aus der Struktur von a: drei

a.add(b2);

// hier erzeugt die Testausgabe des String aus der Struktur von a: eins

// nun wird a noch in die Liste der Klasse C gehangen, es ändert sich aber nichts an der Ausgabe!
</code></pre>
<p>Also, ich weiss nicht was hier passiert, mit Java ist mir das noch nicht untergekommen (meine ich zu glauben!)!</p>
<p>Kann mir da jemand Licht im Dunklen zeigen, bevor ich durchdrehe?</p>
<p>Danke schon mal!</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150633/frage-zu-objekten-referenzen-und-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 01:28:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150633.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Jun 2006 21:09:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 17:02:10 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich suche gerade einen Fehler, der sehr mysteriös ist, leider habe ich gerad den Source nicht zur Hand, kann die Klassen aber ggf. nachliefern.</p>
<p>Folgende Konstellation in Kurzform, damit der Post nicht zu lang wird:</p>
<p>Abstrakte nicht-statische Basisklasse mit pure virtual DTor und privatem CTor.<br />
Diese Klasse hat ein nicht-statisches protected Attribute vom Typ einer Struktur (ich gehr hier davon aus, dass nun alle Objekte aller abgeleiteten Klassen eine eigene Instanz dieser Struktur haben und zwar private). Zudem hat diese Basisklasse eine public-Methode, welche die Struktur zurückliefert.<br />
Eine abgeleitete Klasse A und eine abgeleitete Klasse B. A hat als Attribute eine list von Zeigern auf Objekte von B.<br />
Die Konstruktoren von A und B rufen in ihrer Initialisierung den CTor der abstrakten Basisklasse auf, dieser verlangt einen string und eine Zahl (weiss den Typ gerade nicht auswendig, die spielt hier auch keine Rolle), welche in das Struktur-Attribute eingetragen werden. Zusätzlich wird noch der Typ übergeben, der ebenfalls in die Struktur übernommen wird. Die abgeleiteten Klassen A und B übergeben unterschiedliche Typen.<br />
Es gibt zudem eine Klasse C, die eine list von Zeigern der Klasse A als Attribute hat. Es gibt noch ein paar friend-Beziehungen mit anderen Klassen, aber soweit ich weiss nicht zw. A und B. Denke aber, dass friend hier nicht der Verursacher ist!?</p>
<p>In der Programmklasse wird nun eine Instanz von A erzeugt (beispielhaft):</p>
<pre><code class="language-cpp">A a(&quot;eins&quot;, 0);

// hier erzeugt die Testausgabe des String aus der Struktur von a: eins

B b1(&quot;zwei&quot;, 0);

// hier erzeugt die Testausgabe des String aus der Struktur von a: eins

B b2(&quot;drei&quot;, 0);

// ab hier erzeugt die Testausgabe des String aus der Struktur von a: drei - Wieso? Das ist doch absolut unverständlich! Wie kann b2 a ändern? Und warum nicht schon b1?

a.add(b1);    // für das hinzufügen zur list

// hier erzeugt die Testausgabe des String aus der Struktur von a: drei

a.add(b2);

// hier erzeugt die Testausgabe des String aus der Struktur von a: eins

// nun wird a noch in die Liste der Klasse C gehangen, es ändert sich aber nichts an der Ausgabe!
</code></pre>
<p>Also, ich weiss nicht was hier passiert, mit Java ist mir das noch nicht untergekommen (meine ich zu glauben!)!</p>
<p>Kann mir da jemand Licht im Dunklen zeigen, bevor ich durchdrehe?</p>
<p>Danke schon mal!</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080275</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Mon, 19 Jun 2006 17:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Sun, 18 Jun 2006 21:24:40 GMT]]></title><description><![CDATA[<p>die beschreibung ist nicht ganz eindeutig. code sagt mehr als tausend worte <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/1080285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080285</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 18 Jun 2006 21:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 17:01:50 GMT]]></title><description><![CDATA[<p>Also dann los:</p>
<p>Hier die abstrakte Basisklasse (Header + Impl.):</p>
<pre><code class="language-cpp">#ifndef MENUENTRY_H
#define MENUENTRY_H

#include &lt;libraries/gadtools.h&gt;
#include &lt;string&gt;

class MenuEntryC
{
    friend class MenuC;
    friend class MenusC;

	public:
		virtual ~MenuEntryC() = 0;

    protected:
        struct NewMenu newMenu;

	    MenuEntryC(const int type, const string label);
        struct NewMenu getMenuEntry();

    private:
        MenuEntryC();
};

#endif

// Implementierung
#include &lt;iostream&gt;
#include &quot;MenuEntryC.h&quot;

MenuEntryC::MenuEntryC(const int type, const string label)
{
    cout &lt;&lt; &quot;Create MenuEntry: &quot; &lt;&lt; this &lt;&lt; &quot; Label: &quot; &lt;&lt; label.c_str() &lt;&lt; endl;

    strcpy(newMenu.nm_Label, label.c_str());
    newMenu.nm_Type = type;
    newMenu.nm_CommKey = 0;
    newMenu.nm_Flags = 0;
    newMenu.nm_MutualExclude = 0;
    newMenu.nm_UserData = NULL;
}

MenuEntryC::~MenuEntryC() {}

struct NewMenu MenuEntryC::getMenuEntry()
{
    return newMenu;
}
</code></pre>
<p>Hier nun die erste abgeleitete Klasse (wieder mit Header und Impl.):</p>
<pre><code class="language-cpp">#ifndef MENU_H
#define MENU_H

#include &lt;list&gt;

//#include &quot;MenuC.h&quot;
#include &quot;MenusC.h&quot;
#include &quot;MenuEntryC.h&quot;

class MenuC : public MenuEntryC
{
    friend class MenusC;

	public:
	    MenuC(const string label, const BOOL enabled = TRUE);
	    ~MenuC();

	    void addEntry(MenuEntryC *menuEntry);
        void printEntry();

	private:
	    list&lt;MenuEntryC *&gt; entries;

        list&lt;MenuEntryC *&gt;&amp; getMenuEntries();
};

#endif

// Implementierung
#include &quot;MenuC.h&quot;

MenuC::MenuC(const string label, const BOOL enabled = TRUE) : MenuEntryC(NM_TITLE, label)
{
    cout &lt;&lt; &quot;Create Menu: &quot; &lt;&lt; getMenuEntry().nm_Label &lt;&lt; endl;
}

MenuC::~MenuC() {}

void MenuC::addEntry(MenuEntryC *menuEntry)
{
    entries.push_back(menuEntry);
}

list&lt;MenuEntryC *&gt; &amp;MenuC::getMenuEntries()
{
    return entries;
}

void MenuC::printEntry()
{
    cout &lt;&lt; &quot;Menu: &quot; &lt;&lt; this &lt;&lt; &quot; Label: &quot; &lt;&lt; this-&gt;getMenuEntry().nm_Label &lt;&lt; endl;
}
</code></pre>
<p>Und schließlich die 2. Klasse:</p>
<pre><code class="language-cpp">#ifndef MENUITEM_H
#define MENUITEM_H

#include &lt;string&gt;
#include &quot;MenuEntryC.h&quot;

class MenuItemC : public MenuEntryC
{
	public:
	    MenuItemC(const string label, const BOOL enabled = TRUE);
	    ~MenuItemC();
};

#endif

// Implementierung
#include &quot;MenuItemC.h&quot;

MenuItemC::MenuItemC(const string label, BOOL enabled = TRUE) : MenuEntryC(NM_ITEM, label)
{
}

MenuItemC::~MenuItemC() {}
</code></pre>
<p>Im Hauptprogramm passiert dann folgendes:</p>
<pre><code class="language-cpp">MenusC menus;
MenuC file(&quot;File&quot;, TRUE);

file.printEntry();    // Ausgabe hier: File

MenuItemC openFile(&quot;Open&quot;, TRUE);

file.printEntry();    // Ausgabe hier: File

MenuItemC saveFile(&quot;Save&quot;, TRUE);

file.printEntry();    // Ausgabe hier: Save??? Und bei allen weiteren Ausgaben auch!!!
</code></pre>
<p>Alle Ausgaben erfolgen mit der ObjektID von file!</p>
<p>Ich hab keine Ahnung was hier los ist???!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080777</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Mon, 19 Jun 2006 17:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 17:33:32 GMT]]></title><description><![CDATA[<p>die definition von NewMenu fehlt noch (und ich bin ziemlich sicher, dass der fehler dort liegt - die symptome deuten in eine bestimmte richtung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080806</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 19 Jun 2006 17:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 19:28:50 GMT]]></title><description><![CDATA[<p>NewMenu ist eine Struktur des Betriebssystems und dessen API, sie ist in der libraries/gadtools.h definiert:</p>
<pre><code class="language-cpp">struct NewMenu
{
    UBYTE nm_Type;
    STRPTR nm_Label;
    STRPTR nm_CommKey;
    UWORD nm_Flags;
    LONG nm_MutualExclude;
    APTR nm_UserData;
};
</code></pre>
<p>Wenn gewünscht kann ich auch noch die Beschreibung der Einträge liefern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080920</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Mon, 19 Jun 2006 19:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 19:41:00 GMT]]></title><description><![CDATA[<p>und STRPTR ist ein pointer auf char?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080941</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 19 Jun 2006 19:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 19:54:26 GMT]]></title><description><![CDATA[<p>Soweit ich weiss, ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080959</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Mon, 19 Jun 2006 19:54:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 19:58:32 GMT]]></title><description><![CDATA[<p>dann liegt hier jede menge undefiniertes verhalten vor.</p>
<pre><code class="language-cpp">MenuEntryC::MenuEntryC(const int type, const string label)
{
    cout &lt;&lt; &quot;Create MenuEntry: &quot; &lt;&lt; this &lt;&lt; &quot; Label: &quot; &lt;&lt; label.c_str() &lt;&lt; endl;

    strcpy(newMenu.nm_Label, label.c_str());
    newMenu.nm_Type = type;
    newMenu.nm_CommKey = 0;
    newMenu.nm_Flags = 0;
    newMenu.nm_MutualExclude = 0;
    newMenu.nm_UserData = NULL;
}
</code></pre>
<p>hier wird nm_label nicht initialisiert - das strcpy schreibt also irgendwo hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080965</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 19 Jun 2006 19:58:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 20:21:14 GMT]]></title><description><![CDATA[<p>In allen C-Programmbeispielen, die systemkonform programmiert wurden, werden die Arrays aus struct NewMenu wie folgt angelegt:</p>
<pre><code class="language-cpp">struct NewMenu gb_MenuDescribe[] =
{
  { NM_TITLE, &quot;Project&quot;,   NULL, 0, 0, NULL },
  { NM_ITEM,  &quot;Quit&quot;,      NULL, 0, 0, NULL },
  { NM_END, NULL, NULL, 0, 0, NULL }
};
</code></pre>
<p>Ich versuche hier eine etwas dynamischere Variante. Im Bsp. hier werden die STRPTR doch auch nirgends initialisiert? Oder wird hierbei der STRPTR auf den Anfang der jeweils übergebenen Zeichenkette gelegt? Dann hab ich aber wieder das Problem aus meinem anderen Post, dass ich eine Struktur nicht in der Initialisierungsliste des CTors initialisieren kann!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080980</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Mon, 19 Jun 2006 20:21:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Mon, 19 Jun 2006 21:01:13 GMT]]></title><description><![CDATA[<p>Reth schrieb:</p>
<blockquote>
<p>In allen C-Programmbeispielen, die systemkonform programmiert wurden, werden die Arrays aus struct NewMenu wie folgt angelegt:</p>
<pre><code class="language-cpp">struct NewMenu gb_MenuDescribe[] =
{
  { NM_TITLE, &quot;Project&quot;,   NULL, 0, 0, NULL },
  { NM_ITEM,  &quot;Quit&quot;,      NULL, 0, 0, NULL },
  { NM_END, NULL, NULL, 0, 0, NULL }
};
</code></pre>
<p>Ich versuche hier eine etwas dynamischere Variante. Im Bsp. hier werden die STRPTR doch auch nirgends initialisiert?</p>
</blockquote>
<blockquote>
<p>Oder wird hierbei der STRPTR auf den Anfang der jeweils übergebenen Zeichenkette gelegt?</p>
</blockquote>
<p>korrekt. der typ eines stringliterals ist ein zeiger auf ein konstansten char, der auf die zeichenkette zeigt.</p>
<blockquote>
<p>Dann hab ich aber wieder das Problem aus meinem anderen Post, dass ich eine Struktur nicht in der Initialisierungsliste des CTors initialisieren kann!</p>
</blockquote>
<p>das musst du ja hier auch nicht tun. und du tust es ja bereits auch für die anderen member von NewMenu nicht. an nm_Label ist nichts besonderes, das dich hindert, ihm auf die selbe weise einen wert zuzuweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080998</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 19 Jun 2006 21:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 06:49:20 GMT]]></title><description><![CDATA[<p>Hi, danke hast recht.</p>
<p>Ist mir gestern auch noch eingefallen, sollte dann ca. so funktionieren:</p>
<pre><code class="language-cpp">newMenu.nm_Label = &amp;(label.c_str()[0]);
</code></pre>
<p>Wenn ich die Definition von c_str() noch korrekt im Kopf hab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081099</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Tue, 20 Jun 2006 06:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 07:45:55 GMT]]></title><description><![CDATA[<p>Dir ist schon klar, daß das von label.c_str() zurückgegebene char-Array höchstens so lange existiert wie das label-Objekt, ja? Spätestens wenn du newMenu nach der Destruktion von label verwendest, hast du ein Problem (wohlmöglich sogar deutlich früher).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081124</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Tue, 20 Jun 2006 07:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 08:01:27 GMT]]></title><description><![CDATA[<p>Ja, da ich das Label aber mit:</p>
<pre><code class="language-cpp">MenuC file(&quot;File&quot;, TRUE);
</code></pre>
<p>im Hauptprogramm anlege, sollte es doch so lange existieren, bis file out of scope geht, oder nicht?</p>
<p>Evtl. wäre es hier noch besser, wenn ich den Labelstring per Referenz übergebe, statt per Copy.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081136</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Tue, 20 Jun 2006 08:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 08:08:14 GMT]]></title><description><![CDATA[<p>Der Text existiert solange bis das temporäre Objekt string( &quot;File&quot; ) out of scope geht. Das ist aber nach dem Semikolon in dieser Zeile. Ab diesem Zeitpunkt ist in einer Struktur tief in der API ein ungültiger Zeiger abgelegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081142</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 20 Jun 2006 08:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 08:34:20 GMT]]></title><description><![CDATA[<p>Hm, das kapier ich jetzt nicht ganz, da das Objekt, welches mit:</p>
<pre><code class="language-cpp">MenuC file(&quot;File&quot;, TRUE);
</code></pre>
<p>angelegt wird doch so lange existiert, bis der umgebende Scope (Methode etc.) verlassen wird? Dachte ich zumindest? Oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081164</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Tue, 20 Jun 2006 08:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 08:59:56 GMT]]></title><description><![CDATA[<p>Das Objekt file ja, der String, der aus dem Literal &quot;File&quot; erzeugt wird, nicht.</p>
<p>Was erwartet der File-Konstruktor? Ein std::string.<br />
Was gibst Du ihm? Ein const char*.</p>
<p>Was passiert? Der Compiler entdeckt eine implizite Umwandlung von const char* nach string, bei der der Text kopiert wird. Der Konstruktor von MenuEntryC bekommt einen konstanten std::string, aus dem Du c_str() benutzt. Danach ist der Konstruktor beendet, der konstante std::string, der gebraucht wurde um const char* an MenuEntryC zu übergeben wird gelöscht, und Du stehst da mit einem Pointer, der aus einem c_str() eines jetzt nicht mehr gültigen Objektes stammt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081183</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 20 Jun 2006 08:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 10:07:12 GMT]]></title><description><![CDATA[<p>Wie kann ich dann in diesem Fall den String richtig initialisieren, damit er dauerhaft erhalten bleibt, bis file out of scope geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081237</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Tue, 20 Jun 2006 10:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 10:27:40 GMT]]></title><description><![CDATA[<p>Übergib doch einfach direkt ein &quot;const char*&quot;:</p>
<pre><code class="language-cpp">MenuEntryC::MenuEntryC(const int type, const char* pLabel) 
{ 
    cout &lt;&lt; &quot;Create MenuEntry: &quot; &lt;&lt; this &lt;&lt; &quot; Label: &quot; &lt;&lt; pLabel &lt;&lt; endl; 

    newMenu.nm_Label = pLabel;
    newMenu.nm_Type = type; 
    newMenu.nm_CommKey = 0; 
    newMenu.nm_Flags = 0; 
    newMenu.nm_MutualExclude = 0; 
    newMenu.nm_UserData = NULL; 
}
</code></pre>
<p>Edit: bei den abgeleiteten Klassen (z.B. MenuC) dann natürlich auch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081250</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 20 Jun 2006 10:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Tue, 20 Jun 2006 10:33:49 GMT]]></title><description><![CDATA[<p>Das geht natürlich auch, wollte aber möglichst mit C++/STL-Konstrukten arbeiten,<br />
wobei der const char* hier bestimmt performanter ist, mich aber immer an C erinnert.</p>
<p>Aber ich muss mich wohl damit abfinden, dass die Gemeinsamkeiten zw. C und C++ wohl größer sind als mir lieb wäre. Ich wäre in C++ auch gern ohne Zeiger ausgekommen, aber dann mutieren die STL-Container ja zu Speichermonstern, da immer kopiert wird.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1081261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1081261</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Tue, 20 Jun 2006 10:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Thu, 22 Jun 2006 06:00:16 GMT]]></title><description><![CDATA[<p>Nur der Vollständigkeit halber:</p>
<p>const char * hat nicht funktioniert, da STRPTR ein char * ist.<br />
Nachdem ich die Parameter in char * geändert habe, hats bestens funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082615</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Thu, 22 Jun 2006 06:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Thu, 22 Jun 2006 08:30:23 GMT]]></title><description><![CDATA[<p>Trotzdem würde ich die Parameter als &quot;const char *&quot; übergeben und nur an der entsprechenden Zuweisung einen cast vornehmen:</p>
<pre><code class="language-cpp">newMenu.nm_Label = const_cast&lt;char *&gt;(pLabel); // bzw &lt;STRPTR&gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1082723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082723</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 22 Jun 2006 08:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Objekten, Referenzen und Vererbung on Thu, 22 Jun 2006 09:01:08 GMT]]></title><description><![CDATA[<p>Danke, werde ich probieren!</p>
<p>Da fehlt mir halt die Erfahrung mit C++. Dachte der const_cast geht nur in die andere Richtung (also wenn ich was konstant machen will, was bisher noch nicht als konstant deklariert war).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1082748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1082748</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Thu, 22 Jun 2006 09:01:08 GMT</pubDate></item></channel></rss>