<?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[Klassenvererbung]]></title><description><![CDATA[<p>Hi everyone</p>
<p>Folgendes Problem: in meinem Programm gibt's momentan drei Klassen: &quot;CMeter&quot;, &quot;CIEC1107&quot; und &quot;CZMD120&quot;. Dem Konstruktor von Meter kann eine Addresse mitgegeben werden, welche das Gerät eindeutig identifiziert.</p>
<p>Nun ist es so, dass CIEC1107 ein CMeter-Gerät ist und CZMD120 ein CIEC1107-Gerät (mehrfache Vererbung). Ich habe den Konstruktor von CIEC1107 so aufbereiet, dass CMeter's Konstruktor aufrfut, und CZMD120's Konstruktor ruft CIEC1107's Konstruktor auf (welcher dann ja wieder CMeter's Konstruktor aufrufen sollte <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>Das sieht dann etwa so aus:</p>
<pre><code class="language-cpp">...
CMeter::CMeter(char *m_strAddress) {
...
CIEC1107::CIEC1107(char *m_strAddress): CMeter(m_strAddress) {
...
CZMD120::CZMD120(char *m_strAddress): CIEC1107(m_strAddress) {
...
</code></pre>
<p>So sollte ich also ein CZMD120-Gerät mitsamt Addresse instantiieren können. Leider klappt es nur bis zur CIE1107-Ebene, also über eine Vererbung hinweg. Ab der 2. Vererbung lässt sich das Programm zwar noch kompilieren, stürzt aber bei einer Instanziierung eines solchen Objekts mit diesem Konstruktor sogleich ab.</p>
<p>Woran kann das liegen?</p>
<p>Danke für eure Hilfe und Gruss<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157349/klassenvererbung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 12:42:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157349.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Aug 2006 21:02:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenvererbung on Thu, 24 Aug 2006 21:02:46 GMT]]></title><description><![CDATA[<p>Hi everyone</p>
<p>Folgendes Problem: in meinem Programm gibt's momentan drei Klassen: &quot;CMeter&quot;, &quot;CIEC1107&quot; und &quot;CZMD120&quot;. Dem Konstruktor von Meter kann eine Addresse mitgegeben werden, welche das Gerät eindeutig identifiziert.</p>
<p>Nun ist es so, dass CIEC1107 ein CMeter-Gerät ist und CZMD120 ein CIEC1107-Gerät (mehrfache Vererbung). Ich habe den Konstruktor von CIEC1107 so aufbereiet, dass CMeter's Konstruktor aufrfut, und CZMD120's Konstruktor ruft CIEC1107's Konstruktor auf (welcher dann ja wieder CMeter's Konstruktor aufrufen sollte <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>Das sieht dann etwa so aus:</p>
<pre><code class="language-cpp">...
CMeter::CMeter(char *m_strAddress) {
...
CIEC1107::CIEC1107(char *m_strAddress): CMeter(m_strAddress) {
...
CZMD120::CZMD120(char *m_strAddress): CIEC1107(m_strAddress) {
...
</code></pre>
<p>So sollte ich also ein CZMD120-Gerät mitsamt Addresse instantiieren können. Leider klappt es nur bis zur CIE1107-Ebene, also über eine Vererbung hinweg. Ab der 2. Vererbung lässt sich das Programm zwar noch kompilieren, stürzt aber bei einer Instanziierung eines solchen Objekts mit diesem Konstruktor sogleich ab.</p>
<p>Woran kann das liegen?</p>
<p>Danke für eure Hilfe und Gruss<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124101</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Thu, 24 Aug 2006 21:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Thu, 24 Aug 2006 21:10:46 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Weder dein Codeauszug noch deine Fehlerbeschreibung reichen für eine Beurteilung von uns hier aus. Das was du gezeigt hast ist jedenfalls syntaktisch richtig, davon kommt kein Laufzeitfehler.</p>
<p>Du must deinen Debugger benutzten und der Verlauf bis zum Absturz verfolgen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124104</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 24 Aug 2006 21:10:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Thu, 24 Aug 2006 23:55:12 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Das was du gezeigt hast ist jedenfalls syntaktisch richtig, davon kommt kein Laufzeitfehler.</p>
</blockquote>
<p>Na, das ist ja schon mal was <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>Mein Problem ist allerdings, dass ich keinen Debugger habe. Es ist eine Cross-Plattform Entwicklung für eine XScale Umgebung. Ich bin schon froh, dass meine IDE überhaupt mit dem Compiler klar kommt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Ich muss die Software also stets auf dem Ziel-System laufen lassen, welches leider bei jeder Form von Fehler (und zwar wirklich bei *jeder*) einfach nur folgende Zeilen ausgibt:</p>
<pre><code>Segmentation Fault
</code></pre>
<p>Um also, wie akari vorschlägt, meinem ganzem Code die Ehre zu geben:</p>
<pre><code class="language-cpp">#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

// Basis-Klasse
class CEwbMeter {
      private:
      char strAddress[32];
      public:
      CEwbMeter(void);
      CEwbMeter(char *);
      void set_strAddress(char *);
      char *get_strAddress();
};
CEwbMeter::CEwbMeter() {
     (*this).set_strAddress(&quot;&quot;);
}
CEwbMeter::CEwbMeter(char *m_strAddress) {
     (*this).set_strAddress(m_strAddress);
}
void CEwbMeter::set_strAddress(char *m_strAddress) {
     strcpy(strAddress, m_strAddress);
}
char *CEwbMeter::get_strAddress() {
    return strAddress;
}

// Unter-Klasse
class CIEC1107: public CEwbMeter {
      private:
      char *strDevRep;
      void set_strDevRep(char *);
      public:
      CIEC1107(void);
      CIEC1107(char *);
      void ReadIn(void);
      char *get_strDevRep(void);
};
CIEC1107::CIEC1107(void): CEwbMeter() {
     (*this).set_strDevRep(&quot;&quot;);
}
CIEC1107::CIEC1107(char *m_strAddress): CEwbMeter(m_strAddress) {
     (*this).set_strDevRep(&quot;&quot;);
}
void CIEC1107::ReadIn(void) {

}
char *CIEC1107::get_strDevRep() {
     return strDevRep;
}
void CIEC1107::set_strDevRep(char *m_strDevRep) {
     strcpy(strDevRep, m_strDevRep);
}

// Unter-Unter-Klasse
class CZMD120: public CIEC1107 {
      private:
      char *strDataString;
      void set_strDataString(char *);
      public:
      CZMD120(void);
      CZMD120(char *);
      void mk_strDataString(void);
      char *get_strDataString(void);
};
CZMD120::CZMD120(void): CIEC1107() {
     (*this).set_strDataString(&quot;&quot;);
}
CZMD120::CZMD120(char *m_strAddress): CIEC1107(m_strAddress) {
     (*this).set_strDataString(&quot;&quot;);
}
void CZMD120::mk_strDataString() {

}
char *CZMD120::get_strDataString() {
     return strDataString;
}
void CZMD120::set_strDataString(char *m_strDataString) {
     strcpy(strDataString, m_strDataString);
}

int main(void) {
    /*CIEC1107 iecTest(&quot;34982215&quot;);
    printf(&quot;strAddress: %s;&quot;, iecTest.get_strAddress());*/
    // Funktioniert

    CZMD120 zmdTest(&quot;34982215&quot;);
    printf(&quot;strAddress: %s;&quot;, zmdTest.get_strAddress());
    // Segmentation Fault
}
</code></pre>
<p>Thx again und greeetz<br />
Kessei</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124162</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Thu, 24 Aug 2006 23:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Fri, 25 Aug 2006 02:50:55 GMT]]></title><description><![CDATA[<p>Okeee... Hat sich gerade erledigt <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>Der Fehler war folgender: Meine Char Arrays strDevRep und strDataString wurden nie mit malloc() initialisiert. Beim Verwenden selbiger musste natürlich ein Zugriffsfehler auftreten.</p>
<p>Pointer sind eine Erfindung Satans <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> !</p>
<p>greeetz Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124176</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Fri, 25 Aug 2006 02:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Fri, 25 Aug 2006 06:04:47 GMT]]></title><description><![CDATA[<p>KessiMC schrieb:</p>
<blockquote>
<p>Nun ist es so, dass CIEC1107 ein CMeter-Gerät ist und CZMD120 ein CIEC1107-Gerät (mehrfache Vererbung).</p>
</blockquote>
<p>Nur um das mal zu klären: Das hat nichts mit Mehrfachvererbung zu tun! <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>KessiMC schrieb:</p>
<blockquote>
<p>Der Fehler war folgender: Meine Char Arrays strDevRep und strDataString wurden nie mit malloc() initialisiert. Beim Verwenden selbiger musste natürlich ein Zugriffsfehler auftreten.</p>
<p>Pointer sind eine Erfindung Satans <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> !</p>
</blockquote>
<p>Jaja, alles auf die Pointer schieben! Das Problem liegt doch immer am Programmierer! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
Um sowas zu vermeiden wäre es in C++ übrigens angebracht Strings zu verwenden (std::string).</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124192</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Fri, 25 Aug 2006 06:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Fri, 25 Aug 2006 11:59:12 GMT]]></title><description><![CDATA[<p>Stiiimmt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Mehrfachvererbung wäre ja, wenn eine Klasse 2 verschiedene Basisklassen hätte. Aber wie nennt man dann das hier <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124359</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Fri, 25 Aug 2006 11:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Fri, 25 Aug 2006 12:05:19 GMT]]></title><description><![CDATA[<p>Einfachvererbung z.B.? <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/1124365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124365</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Fri, 25 Aug 2006 12:05:19 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Fri, 25 Aug 2006 12:30:03 GMT]]></title><description><![CDATA[<p>pwnd :p</p>
<p>Na schön, terminologisch macht unsere wunderbare Sprache also keinen Unterschied zwischen einer Klasse, die von einer Basisklasse abstammt und einer Klasse, welche von einer Klasse abstammt, welche selbst wiederum von einer Basisklasse abstammt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124389</guid><dc:creator><![CDATA[KessiMC]]></dc:creator><pubDate>Fri, 25 Aug 2006 12:30:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenvererbung on Mon, 28 Aug 2006 08:45:08 GMT]]></title><description><![CDATA[<p>KessiMC schrieb:</p>
<blockquote>
<p>pwnd :p</p>
<p>Na schön, terminologisch macht unsere wunderbare Sprache also keinen Unterschied zwischen einer Klasse, die von einer Basisklasse abstammt und einer Klasse, welche von einer Klasse abstammt, welche selbst wiederum von einer Basisklasse abstammt?</p>
</blockquote>
<p>Naja, es <em>ist</em> ja auch kein Unterschied <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125929</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 28 Aug 2006 08:45:08 GMT</pubDate></item></channel></rss>