<?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[Konstruktoren und Vererbung]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>ich beschäftige mich Hobby mäßig mit C++ und habe noch nicht sehr viel Erfahrung mit C++.<br />
Nun bin ich aber bei Konstruktoren und deren Vererbung auf ein Problem gestoßen und ich hoffe das mir hier jemand weiterhelfen kann.</p>
<p>Ich habe die folgenden 2 Klassen:</p>
<pre><code>class Hersteller
{
      private:
             char name[80];

      public:
             friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Hersteller&amp;);

             Hersteller(char *);
             const char * getName() const;
};
</code></pre>
<p>(Die Funktionen der Hersteller Klasse habe ich implentiert)</p>
<pre><code>class Modell
{

      private:
              Hersteller &amp; hersteller;
              char bez[60];
              char ausfuehrung[120];
              int leistung;
              int hubraum;

      public:
              friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Modell&amp;);

              Modell(Hersteller&amp;, char *, char *, int, int);
              Hersteller &amp; getHersteller() const;
              const char * getBez() const;
              const char * getAusfuehrung() const;
              int getLeistung() const;
              int getHubraum() const;
};
</code></pre>
<p>An dieses Stelle komme ich schon beim implementieren des Modell-Konstruktors nicht weiter und würde mich freuen wenn mir jemand helfen könnte.</p>
<p>(Mein derzeitger Konstruktor sieht so aus:)</p>
<pre><code>Modell :: Modell(Hersteller&amp; hst, char * _bez, char * _ausfuehrung, int _leistung, int _hubraum)
{
       phst = &amp;hst;
       strncpy(bez, _bez, 60);
       strncpy(ausfuehrung, _ausfuehrung, 120);
       this-&gt;leistung = _leistung;
       this-&gt;hubraum = _hubraum;
}
</code></pre>
<p>Mit freundliche Grüßen</p>
<p>Björn</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229954/konstruktoren-und-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 14:44:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229954.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Dec 2008 15:42:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktoren und Vererbung on Thu, 18 Dec 2008 15:42:15 GMT]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>ich beschäftige mich Hobby mäßig mit C++ und habe noch nicht sehr viel Erfahrung mit C++.<br />
Nun bin ich aber bei Konstruktoren und deren Vererbung auf ein Problem gestoßen und ich hoffe das mir hier jemand weiterhelfen kann.</p>
<p>Ich habe die folgenden 2 Klassen:</p>
<pre><code>class Hersteller
{
      private:
             char name[80];

      public:
             friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Hersteller&amp;);

             Hersteller(char *);
             const char * getName() const;
};
</code></pre>
<p>(Die Funktionen der Hersteller Klasse habe ich implentiert)</p>
<pre><code>class Modell
{

      private:
              Hersteller &amp; hersteller;
              char bez[60];
              char ausfuehrung[120];
              int leistung;
              int hubraum;

      public:
              friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Modell&amp;);

              Modell(Hersteller&amp;, char *, char *, int, int);
              Hersteller &amp; getHersteller() const;
              const char * getBez() const;
              const char * getAusfuehrung() const;
              int getLeistung() const;
              int getHubraum() const;
};
</code></pre>
<p>An dieses Stelle komme ich schon beim implementieren des Modell-Konstruktors nicht weiter und würde mich freuen wenn mir jemand helfen könnte.</p>
<p>(Mein derzeitger Konstruktor sieht so aus:)</p>
<pre><code>Modell :: Modell(Hersteller&amp; hst, char * _bez, char * _ausfuehrung, int _leistung, int _hubraum)
{
       phst = &amp;hst;
       strncpy(bez, _bez, 60);
       strncpy(ausfuehrung, _ausfuehrung, 120);
       this-&gt;leistung = _leistung;
       this-&gt;hubraum = _hubraum;
}
</code></pre>
<p>Mit freundliche Grüßen</p>
<p>Björn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632457</guid><dc:creator><![CDATA[BjoVo]]></dc:creator><pubDate>Thu, 18 Dec 2008 15:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktoren und Vererbung on Thu, 18 Dec 2008 15:49:15 GMT]]></title><description><![CDATA[<p>Und was ist das Problem? Dass du phst nirgends deklariert hast? Oder dass du statt std::string char-Arrays benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632468</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 18 Dec 2008 15:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktoren und Vererbung on Thu, 18 Dec 2008 15:55:23 GMT]]></title><description><![CDATA[<p>Ich hatte das &quot;phst&quot; schon einmal im protected Bereich implementiert aber dann erhalte ich folgende Fehlermeldung:</p>
<p>In constructor 'Modell::Modell(Hersteller&amp;, char *, char *, int, int)':<br />
no matching function for call to 'Hersteller::Hersteller()'<br />
candiates are: Hersteller::Hersteller(const Hersteller&amp;)<br />
Hersteller::Hersteller(char <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>uninitialized reference member 'Modell::Hersteller'</p>
<p>Ich interpretiere die Fehlermeldung so, dass der Compiler nicht weiss welche Funktion er aufrufen soll, habe allerdings keine Ahnung wie ich ihm sagen soll welche er verwenden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632472</guid><dc:creator><![CDATA[BjoVo]]></dc:creator><pubDate>Thu, 18 Dec 2008 15:55:23 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktoren und Vererbung on Thu, 18 Dec 2008 15:58:27 GMT]]></title><description><![CDATA[<p>BjoVo schrieb:</p>
<blockquote>
<p>Ich hatte das &quot;phst&quot; schon einmal im protected Bereich implementiert aber dann erhalte ich folgende Fehlermeldung:</p>
</blockquote>
<p>Die Fehlermeldung deutet eher darauf hin, dass du statt einer Referenz einen normalen Member hattest.</p>
<p>So oder so musst du deinen Hersteller-Member in der Initialisierungsliste des Modell-Konstruktors initialisieren, denn nachträgliches Zuweisen im Konstruktor selbst geht weder bei Referenzen noch bei Objekten von Klassen, die keinen Defaultkonstruktor haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632473</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 18 Dec 2008 15:58:27 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktoren und Vererbung on Thu, 18 Dec 2008 16:06:17 GMT]]></title><description><![CDATA[<p>BjoVo schrieb:</p>
<blockquote>
<p>ich beschäftige mich Hobby mäßig mit C++ und habe noch nicht sehr viel Erfahrung mit C++.</p>
</blockquote>
<p>Merke ich, da du auch keine Vererbung im Beispiel verwendest [Vererbung: A ist ein B], aber von dieser sprichst (Du verwendest Komposition [Komposition: A enthält ein B]).</p>
<p>BjoVo schrieb:</p>
<blockquote>
<p>Nun bin ich aber bei Konstruktoren ... auf ein Problem gestoßen</p>
</blockquote>
<p>(Falsches durch ... gestrichen)</p>
<p>Und bitte verwende nicht die code- sondern die cpp-Tags für C/C++ Code (Der Button liegt direkt neben den Code-Button)...</p>
<p>1. Mach dir das leben leichter, und arbeite mit der std::string klasse statt mit char-Arrays.<br />
2. Niemals &quot;using namespace std&quot; im Header!<br />
3. Bitte keine Kryptischen Abkürzungen (bez für Bezeichnung...)<br />
4. Ich würde im Header Parameter immer Ausschreiben. Man sollte niemals gezwungen sein in die Implementierung zu schauen um die Parameter zu verstehen (Unterstützt auch die Regel: Programmiere immer gegen die Schnittstelle, niemals die Implementierung).</p>
<p>Ich passe mal etwas an:</p>
<pre><code class="language-cpp">// Hersteller.h
#ifndef HERSTELLER_HEADER
#define HERSTELLER_HEADER

#include &lt;string&gt;
#include &lt;ostream&gt;

class Hersteller
{
    private:
        std::string name;

    public:
        friend std::ostream&amp; operator&lt;&lt;(
            std::ostream &amp;,
            Hersteller const &amp;);

        Hersteller(
            std::string const &amp; name);

        std::string getName() const;
};

std::ostream&amp; operator&lt;&lt;(
    std::ostream &amp; out,
    Hersteller const &amp; hersteller);

#endif // HERSTELLER_HEADER
</code></pre>
<pre><code class="language-cpp">// Modell.h
#ifndef MODELL_HEADER
#define MODELL_HEADER

#include &lt;string&gt;
#include &lt;ostream&gt;

class Hersteller; // Vorwärtsdeklaration

class Modell
{
    private:
        Hersteller &amp; hersteller;
        std::string bezeichnung;
        std::string ausfuehrung;
        int leistung;
        int hubraum;

    public:
        friend std::ostream&amp; operator&lt;&lt;(
            std::ostream &amp;,
            Modell const &amp;);

        Modell(
            Hersteller &amp; hersteller,
            std::string const &amp; bezeichnung,
            std::string const &amp; ausfuehrung,
            int leistung,
            int hubraum);

        Hersteller &amp; getHersteller() const;
        std::string getBez() const;
        std::string getAusfuehrung() const;
        int getLeistung() const;
        int getHubraum() const;
};

std::ostream&amp; operator&lt;&lt;(
    std::ostream&amp; out,
    Modell const &amp; modell);

#endif // MODELL_HEADER
</code></pre>
<p>BjoVo schrieb:</p>
<blockquote>
<p>An dieses Stelle komme ich schon beim implementieren des Modell-Konstruktors nicht weiter und würde mich freuen wenn mir jemand helfen könnte.</p>
</blockquote>
<p>Refernzen lassen sich nur initialisieren, niemals zuweisen. Was du machst ist eine Zuweisung, den die Initialisierung erfolgt vor dem Konstruktorrumpf. Stichwort hier ist die Initialisierungsliste.</p>
<pre><code class="language-cpp">Modell::Modell(
    Hersteller &amp; hersteller,
    std::string const &amp; bezeichnung,
    std::string const &amp; ausfuehrung,
    int leistung,
    int hubraum)
:   hersteller(hersteller),    // Initialisierungsliste
    bezeichnung(bezeichnung),  // Schreibweise hier &quot;&lt;Membername&gt;(&lt;Wert&gt;)&quot;
    ausfuehrung(ausfuehrung),  // Begonnen wird das ganze mit einen Doppelpunkt.
    leistung(leistung),        // Jede Initialisierung mit Komma trennen, und
    hubraum(hubraum)           // nach möglichkeit Reihenfolge wie in der
{   // Deklaration verwenden, da die Initialisierung in dieser Reihenfolge
}   // geschieht, egal wie du sie hier angibst
</code></pre>
<p>Und &quot;phst = &amp;hst&quot; ist eh falsch. Du arbeitest mit einer Referenz, nun willst du wohl einen Zeiger zuweisen (Ich deute mal das p als Pointer), laut deinen Beispiel ist aber eine Referenz im Header deklariert.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632481</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 18 Dec 2008 16:06:17 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktoren und Vererbung on Thu, 18 Dec 2008 16:13:23 GMT]]></title><description><![CDATA[<p>Ich werde es ausprobieren. Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632487</guid><dc:creator><![CDATA[BjoVo]]></dc:creator><pubDate>Thu, 18 Dec 2008 16:13:23 GMT</pubDate></item></channel></rss>