<?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[2 Klassen die sich gegenseitig einbinden.]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe folgendes Problem, ich muss für eine Klausur ein Programm schreiben in dem 2 Klassen voneinander abhänig sind, sprich sich gegenseitig includen. Nach durchforsten dieses Forums hab ich rausgefunden das ich das mit einer vorwärtsdeklaration lösen kann. Hat auch funktioniert!!! Nun möchte ich in klasse A einen Container(list) haben der aus Zeigern auf Klasse B besteht. Klasse B soll eine Referenz auf Klasse A haben zu der sie gehört. Habe jetzt mal ein einfaches Programm geschrieben was ungefähr die Anforderungen aber sonst keinen grossen Sinn hat.</p>
<p>Das Programm enthält die Klassen Fahrzeug und Teile, hier poste ich mal beide Header Dateien.</p>
<p><a href="//Fahrzeug.h">//Fahrzeug.h</a><br />
//Hier soll als Attribut eine Liste aus Zeigern<br />
//auf die Klasse Teile rein<br />
#pragma once<br />
#ifndef FAHRZEUG_H<br />
#define FAHRZEUG_H</p>
<p>#include&lt;string&gt;<br />
#include&lt;list&gt;<br />
#include&quot;Teile.h&quot;</p>
<p>class Fahrzeug<br />
{<br />
public:<br />
Fahrzeug();<br />
Fahrzeug(const std::string&amp;,const double&amp;,const int&amp;); // name,leerGewicht, raeder<br />
~Fahrzeug();<br />
void beschleunigen(const double&amp;);<br />
void addGewicht(const double&amp;);<br />
void printData(void);</p>
<p>//----- Set&amp;Get Methoden -----</p>
<p>void setGewicht(const double&amp;);<br />
void setName(const std::string&amp;);<br />
void setRaeder(const int&amp;);<br />
std::string getName(void);</p>
<p>private:<br />
std::string name;<br />
int raeder;<br />
double speed;<br />
double gewicht;<br />
double leerGewicht;<br />
Teile *teilePtr; //&lt;-- das hier soll die liste geben &quot;list&lt;Teile&gt; alleTeile&quot;<br />
};</p>
<p>#endif</p>
<p>****************************************************************************</p>
<p><a href="//Teile.h">//Teile.h</a><br />
//Diese Klasse soll als Attribut eine Referenz auf Fahrzeug haben<br />
#pragma once<br />
#ifndef TEILE_H<br />
#define TEILE_H</p>
<p>#include&lt;string&gt;</p>
<p>class Fahrzeug; //Vorwärtsdeklaration</p>
<p>class Teile<br />
{<br />
public:<br />
Teile();<br />
Teile(const std::string&amp;, const double&amp;,Fahrzeug&amp;); //name, gewicht, fahrzeug zu dem Teil gehört<br />
~Teile(void);<br />
void printData(void);</p>
<p>//----- Set&amp;Get Methoden -----</p>
<p>void setName(const std::string&amp;);<br />
void setGewicht(const double&amp;);<br />
double getGewicht(void);<br />
std::string getName(void);</p>
<p>private:<br />
std::string name;<br />
double gewicht;<br />
Fahrzeug *zuDiesemFahrzeugGehoehreIch;<br />
};</p>
<p>#endif</p>
<p>Wenn ich so kompilieren lasse läuft das Programm einwandfrei, wenn ich jetzt aber in Fahrzeug.h den zeiger durch eine liste(wie oben kommentiert) ersetze bekomme ich 9 Fehler, eigentlich nur 3 aber diese bei jedem kompilieren von main.cpp, Teile.cpp, und Fahrzeug.cpp &lt;-- Vermutlich weil die Fahrzeug.cpp in Teile und main included wird?!?!</p>
<p>------ Erstellen gestartet: Projekt: Test, Konfiguration: Debug Win32 ------<br />
Kompilieren...<br />
Fahrzeug.cpp<br />
c:\dokumente und einstellungen\michael\eigene dateien\fh darmstadt\6. semester\pg ii\übung\test\test\fahrzeug.h(32) : error C2143: Syntaxfehler: Es fehlt ';' vor '&lt;'<br />
c:\dokumente und einstellungen\michael\eigene dateien\fh darmstadt\6. semester\pg ii\übung\test\test\fahrzeug.h(32) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.<br />
c:\dokumente und einstellungen\michael\eigene dateien\fh darmstadt\6. semester\pg ii\übung\test\test\fahrzeug.h(32) : error C2238: Unerwartete(s) Token vor ';'</p>
<p>Wäre nett wenn jemand die Zeit opfern könnte um sich das mal anzuschauen. Wäre für jeden Rat dankbar <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>MFG</p>
<p>michl`</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/216058/2-klassen-die-sich-gegenseitig-einbinden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 10:57:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216058.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Jun 2008 15:47:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 15:47:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe folgendes Problem, ich muss für eine Klausur ein Programm schreiben in dem 2 Klassen voneinander abhänig sind, sprich sich gegenseitig includen. Nach durchforsten dieses Forums hab ich rausgefunden das ich das mit einer vorwärtsdeklaration lösen kann. Hat auch funktioniert!!! Nun möchte ich in klasse A einen Container(list) haben der aus Zeigern auf Klasse B besteht. Klasse B soll eine Referenz auf Klasse A haben zu der sie gehört. Habe jetzt mal ein einfaches Programm geschrieben was ungefähr die Anforderungen aber sonst keinen grossen Sinn hat.</p>
<p>Das Programm enthält die Klassen Fahrzeug und Teile, hier poste ich mal beide Header Dateien.</p>
<p><a href="//Fahrzeug.h">//Fahrzeug.h</a><br />
//Hier soll als Attribut eine Liste aus Zeigern<br />
//auf die Klasse Teile rein<br />
#pragma once<br />
#ifndef FAHRZEUG_H<br />
#define FAHRZEUG_H</p>
<p>#include&lt;string&gt;<br />
#include&lt;list&gt;<br />
#include&quot;Teile.h&quot;</p>
<p>class Fahrzeug<br />
{<br />
public:<br />
Fahrzeug();<br />
Fahrzeug(const std::string&amp;,const double&amp;,const int&amp;); // name,leerGewicht, raeder<br />
~Fahrzeug();<br />
void beschleunigen(const double&amp;);<br />
void addGewicht(const double&amp;);<br />
void printData(void);</p>
<p>//----- Set&amp;Get Methoden -----</p>
<p>void setGewicht(const double&amp;);<br />
void setName(const std::string&amp;);<br />
void setRaeder(const int&amp;);<br />
std::string getName(void);</p>
<p>private:<br />
std::string name;<br />
int raeder;<br />
double speed;<br />
double gewicht;<br />
double leerGewicht;<br />
Teile *teilePtr; //&lt;-- das hier soll die liste geben &quot;list&lt;Teile&gt; alleTeile&quot;<br />
};</p>
<p>#endif</p>
<p>****************************************************************************</p>
<p><a href="//Teile.h">//Teile.h</a><br />
//Diese Klasse soll als Attribut eine Referenz auf Fahrzeug haben<br />
#pragma once<br />
#ifndef TEILE_H<br />
#define TEILE_H</p>
<p>#include&lt;string&gt;</p>
<p>class Fahrzeug; //Vorwärtsdeklaration</p>
<p>class Teile<br />
{<br />
public:<br />
Teile();<br />
Teile(const std::string&amp;, const double&amp;,Fahrzeug&amp;); //name, gewicht, fahrzeug zu dem Teil gehört<br />
~Teile(void);<br />
void printData(void);</p>
<p>//----- Set&amp;Get Methoden -----</p>
<p>void setName(const std::string&amp;);<br />
void setGewicht(const double&amp;);<br />
double getGewicht(void);<br />
std::string getName(void);</p>
<p>private:<br />
std::string name;<br />
double gewicht;<br />
Fahrzeug *zuDiesemFahrzeugGehoehreIch;<br />
};</p>
<p>#endif</p>
<p>Wenn ich so kompilieren lasse läuft das Programm einwandfrei, wenn ich jetzt aber in Fahrzeug.h den zeiger durch eine liste(wie oben kommentiert) ersetze bekomme ich 9 Fehler, eigentlich nur 3 aber diese bei jedem kompilieren von main.cpp, Teile.cpp, und Fahrzeug.cpp &lt;-- Vermutlich weil die Fahrzeug.cpp in Teile und main included wird?!?!</p>
<p>------ Erstellen gestartet: Projekt: Test, Konfiguration: Debug Win32 ------<br />
Kompilieren...<br />
Fahrzeug.cpp<br />
c:\dokumente und einstellungen\michael\eigene dateien\fh darmstadt\6. semester\pg ii\übung\test\test\fahrzeug.h(32) : error C2143: Syntaxfehler: Es fehlt ';' vor '&lt;'<br />
c:\dokumente und einstellungen\michael\eigene dateien\fh darmstadt\6. semester\pg ii\übung\test\test\fahrzeug.h(32) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.<br />
c:\dokumente und einstellungen\michael\eigene dateien\fh darmstadt\6. semester\pg ii\übung\test\test\fahrzeug.h(32) : error C2238: Unerwartete(s) Token vor ';'</p>
<p>Wäre nett wenn jemand die Zeit opfern könnte um sich das mal anzuschauen. Wäre für jeden Rat dankbar <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>MFG</p>
<p>michl`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531704</guid><dc:creator><![CDATA[michael_vhm]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 15:50:54 GMT]]></title><description><![CDATA[<p>Habe den Post aus versehen nicht mit meinem Login geschrieben, also der Post oben ist von mir <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1531708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531708</guid><dc:creator><![CDATA[michl*]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:50:54 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 17:24:24 GMT]]></title><description><![CDATA[<p>michael_vhm schrieb:</p>
<blockquote>
<p>Wäre nett wenn jemand die Zeit opfern könnte um sich das mal anzuschauen. Wäre für jeden Rat dankbar <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>
</blockquote>
<p>Wäre nett wenn du vorher die Zeit opfern kannst das ganze mit den cpp-Tags zu versehen und sauber zu formatieren. Hierdurch kämpft sich kein Mensch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531774</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 Jun 2008 17:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 17:30:10 GMT]]></title><description><![CDATA[<p>Ok, entschuldigung, aber was genau meinst du mit cpp Tags? Werde es dann heute abend editieren?!?!?! Und wie genau formatieren? Habe doch die .h dateien gepostet sind doch übersichtlich oder meinst du kommentare mit //standart Konstruktor usw.?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531778</guid><dc:creator><![CDATA[michl*]]></dc:creator><pubDate>Wed, 18 Jun 2008 17:30:10 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 17:35:06 GMT]]></title><description><![CDATA[<p>michl` schrieb:</p>
<blockquote>
<p>Ok, entschuldigung, aber was genau meinst du mit cpp Tags? Werde es dann heute abend editieren?!?!?! Und wie genau formatieren? Habe doch die .h dateien gepostet sind doch übersichtlich oder meinst du kommentare mit //stan**** Konstruktor usw.?</p>
</blockquote>
<p>Wenn du einen Eintrag postest, gibt es darunter etliche Icons und beschriftete Buttons. Da wählst du den &quot;C/C++&quot; Button 2*aus, Kopierst deinen Code zwischen diese beiden Tags und gehst mal noch weiter unten auf Vorschau.</p>
<p>Dann formatierst du deinen Code lesbar (Sprich mit Einrückungen etc.).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531783</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 Jun 2008 17:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 17:38:27 GMT]]></title><description><![CDATA[<p>Da ich jetzt mal nett und freundlich bin:</p>
<p>Das Ergebnis sollte in etwa so aussehen:</p>
<pre><code class="language-cpp">//Fahrzeug.h
//Hier soll als Attribut eine Liste aus Zeigern
//auf die Klasse Teile rein
#pragma once
#ifndef FAHRZEUG_H
#define FAHRZEUG_H

#include&lt;string&gt;
#include&lt;list&gt;
#include&quot;Teile.h&quot;

class Fahrzeug
{
  public:
    Fahrzeug();
    Fahrzeug(const std::string&amp;,const double&amp;,const int&amp;); // name,leerGewicht, raeder
    ~Fahrzeug();
    void beschleunigen(const double&amp;);
    void addGewicht(const double&amp;);
    void printData(void);

    //----- Set&amp;Get Methoden -----

    void setGewicht(const double&amp;);
    void setName(const std::string&amp;);
    void setRaeder(const int&amp;);
    std::string getName(void);

  private:
    std::string name;
    int raeder;
    double speed;
    double gewicht;
    double leerGewicht;
    Teile *teilePtr; //&lt;-- das hier soll die liste geben &quot;list&lt;Teile&gt; alleTeile&quot;
};

#endif
</code></pre>
<pre><code class="language-cpp">//Teile.h
//Diese Klasse soll als Attribut eine Referenz auf Fahrzeug haben
#pragma once
#ifndef TEILE_H
#define TEILE_H

#include&lt;string&gt;

class Fahrzeug; //Vorwärtsdeklaration

class Teile
{
  public:
    Teile();
    Teile(const std::string&amp;, const double&amp;,Fahrzeug&amp;); //name, gewicht, fahrzeug zu dem Teil gehört
    ~Teile(void);
    void printData(void);

    //----- Set&amp;Get Methoden -----

    void setName(const std::string&amp;);
    void setGewicht(const double&amp;);
    double getGewicht(void);
    std::string getName(void);

  private:
    std::string name;
    double gewicht;
    Fahrzeug *zuDiesemFahrzeugGehoehreIch;
};

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1531784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531784</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 Jun 2008 17:38:27 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 17:40:36 GMT]]></title><description><![CDATA[<p>Ok, danke für die antwort.<br />
Aber, da ich den Text ja leider als unreg. User geschrieben habe,<br />
weiss ich leider nicht wie ich diesen jetzt editieren kann.<br />
Könntest du mir da vielleicht noch bescheid geben? Oder soll ich ihn noch<br />
einmal Posten? Aber das wird bestimmt auch nicht gerne gesehen, oder?</p>
<p>MFG</p>
<p>michl`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531785</guid><dc:creator><![CDATA[michl*]]></dc:creator><pubDate>Wed, 18 Jun 2008 17:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 17:41:56 GMT]]></title><description><![CDATA[<p>Ok, vielen dank <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="🙂"
    /><br />
Das hat zumindest meine letzten paar Fragen beantwortet.</p>
<p>MFG</p>
<p>michl`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531786</guid><dc:creator><![CDATA[michl*]]></dc:creator><pubDate>Wed, 18 Jun 2008 17:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 17:56:44 GMT]]></title><description><![CDATA[<p>Und nun nehme ich mal deinen Code auseinander:</p>
<p>1. Entweder #pragma once oder Includeguards, ich würde (da portabel) zu letzteren tendieren.</p>
<p>2. Gewöhn dir bitte gleich ab im Header die Bezeichner bei den Parametern weg zu lassen.<br />
a) Man schaut um einen Überblick zu bekommen immer erst in den Header<br />
b) Wenn du Hilfe willst sollten wir den Code auch lesen können</p>
<p>Also statt...</p>
<pre><code class="language-cpp">Fahrzeug(
      const std::string&amp;,
      const double&amp;,
      const int&amp;); // name,leerGewicht, raeder
</code></pre>
<p>...bitte:</p>
<pre><code class="language-cpp">Fahrzeug(
      const std::string&amp; name,
      const double&amp; leerGewicht,
      const int&amp; raeder);
</code></pre>
<p>3. Const Referenzen sind schon gut, aber bitte nicht bei den einfachen Datentypen wie int (und ich würde es auch nicht für double machen), sondern in dem Fall ist call-by-value besser.</p>
<pre><code class="language-cpp">Fahrzeug(
      const std::string&amp; name,
      double leerGewicht,
      int raeder);
</code></pre>
<p>4. Wie hast du versucht die Liste zu verwenden?<br />
Ich hoffe mal so:</p>
<pre><code class="language-cpp">std::list&lt;Teile&gt; teile;
</code></pre>
<p>5. Es ist kein Fehler, aber bei (void) wird üblicherweise eigentlich nur () geschrieben.</p>
<p>6. Getter sollten in der Regel keine Zustände ändern, daher als const deklariert werden (Gilt möglichst für alle nicht-modifizierenden Methoden).</p>
<pre><code class="language-cpp">std::string getName() const;
</code></pre>
<p>7. Modifizierst du in dem folgenden Konstruktor das Fahrzeug?</p>
<pre><code class="language-cpp">Teile(
      const std::string&amp; name,
      double gewicht,
      Fahrzeug&amp; fahrzeug);
</code></pre>
<p>Wenn nicht bitte als const Referenz übergeben.</p>
<p>8. Auch kein Fehler, aber vielleicht für die Zukunft leichter...</p>
<p>Bei Konstanten gibt es mehrere mögliche Schreibweisen. Das const vor dem Bezeichner zu setzen ist zugegebener Maßen nicht unüblich, Dahinter hat aber aus Konsistenzgründen einen Vorteil:</p>
<pre><code class="language-cpp">const int &amp; a; // Ist identisch mit
    int const &amp; a;

    const int * a; // Ist identisch mit
    int const * a; // aber nicht mit
    int * const a;

    // Wenn man sich das const hinter den Bezeichern angewöhnt, kann
    // man folgendes...
    int const * const a;
    // Als int-Konstante Zeiger-Konstante lesen
    // Damit sollte bei den folgenden beiden Fällen eindeutlich sein,
    // welcher Anteil tatsächlich konstant ist:
    int const * a; // int-Konstante Zeiger (Wert konstant)
    int * const a; // int Zeiger-Konstante (Zeiger konstant)
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531795</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 Jun 2008 17:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 18:44:21 GMT]]></title><description><![CDATA[<p>Erstmal danke ich dir recht herzlich für deine Mühe <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>zu 1. Ok, dann streiche ich das</p>
<pre><code class="language-cpp">#pragma once
</code></pre>
<p>und nehme die include<br />
Guards.</p>
<p>zu 2. Hab ich am anfang gemacht, aber dann in einem Buch gelesen das man das<br />
auch weg lassen kann, an die lesbarkeit habe ich garnicht gedacht <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>
<p>zu 4. NEIIIIN, habe als ich einen Thread über Vorwärtsdeklaration hier im<br />
Forum gelesen habe gelesen das mann</p>
<pre><code class="language-cpp">using namespace std;
</code></pre>
<p>nicht in die Header Datei schreiben soll, habe es rausgelöscht und<br />
alles geändert bis auf die Liste <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /><br />
Wenn ich eine Liste aus zeigern haben möchte mach ich das dann so:</p>
<pre><code class="language-cpp">std::list&lt;Teile*&gt; alleTeile;
</code></pre>
<p>?</p>
<p>zu 6. Werde gleich morgen früh noch alle Set/Get Methoden <strong>const</strong><br />
machen(wird den Prof bestimmt auch milder stimmen)</p>
<p>zu 7. Nein Modifiziere ich nicht, habe aber in diesem beispiel im Fahrzeug-<br />
Konstruktor gleich ein Teile-Objekt dynamisch erzeugt und mittels<br />
<strong>&quot;this&quot;</strong> das Fahrzeug an das Teile Objekt(über den Konstruktor) übergeben.</p>
<pre><code class="language-cpp">Teile(
      const std::string&amp; name,
      double gewicht,
      const Fahrzeug&amp; fahrzeug);
</code></pre>
<p>Als ich das const deklariert hatte habe ich mit dem <strong>&quot;this&quot;</strong><br />
probleme bekommen(glaube zumindest das es das war, bin momentan auf<br />
arbeit und kann erst morgen früh wieder an den Code ran.) Werde es dann<br />
nochmal mit <strong>&quot;const&quot;</strong> versuchen!!</p>
<p>Wie gesagt werde alle deine Verbesserung Vorschläge morgen umsetzen und dann berichten, falls noch was offen sein sollte, habe ich hoffentlich alle Gutmütigkeit nicht heute schon aufgebraucht <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="😉"
    /><br />
Vielen dank nochmal und einen schönen Abend!!</p>
<p>MFG</p>
<p>michl`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531827</guid><dc:creator><![CDATA[michl*]]></dc:creator><pubDate>Wed, 18 Jun 2008 18:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 18 Jun 2008 19:30:14 GMT]]></title><description><![CDATA[<p>michl` schrieb:</p>
<blockquote>
<p>zu 2. Hab ich am anfang gemacht, aber dann in einem Buch gelesen das man das<br />
auch weg lassen kann, an die lesbarkeit habe ich garnicht gedacht <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>
</blockquote>
<p>Nicht alles was man kann, macht auch Sinn <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>michl` schrieb:</p>
<blockquote>
<p>Wenn ich eine Liste aus zeigern haben möchte mach ich das dann so:</p>
<pre><code class="language-cpp">std::list&lt;Teile*&gt; alleTeile;
</code></pre>
<p>?</p>
</blockquote>
<p>Ja. Dann sollte reicht zudem eine Vorwärtsdeklaration aus. ABER: du musst dann auch händisch den Speicher aufräumen (Die Liste macht kein automatisches delete).</p>
<p>michl` schrieb:</p>
<blockquote>
<p>zu 6. Werde gleich morgen früh noch alle Set/Get Methoden <strong>const</strong><br />
machen(wird den Prof bestimmt auch milder stimmen)</p>
</blockquote>
<p>Die Setter bitte nicht. Mit dem &quot;const&quot; hinter der Funktion zeigst du an, das diese Methode nichts am Objektzustand ändert. Die Setter ändern aber den Zustand, die Getter in der Regel nicht.</p>
<p>michl` schrieb:</p>
<blockquote>
<p>zu 7. Nein Modifiziere ich nicht, habe aber in diesem beispiel im Fahrzeug-<br />
Konstruktor gleich ein Teile-Objekt dynamisch erzeugt und mittels<br />
<strong>&quot;this&quot;</strong> das Fahrzeug an das Teile Objekt(über den Konstruktor) übergeben.</p>
</blockquote>
<p>Dies sollte gehen, solange du auf nichts vom Fahrzeug zugreifst. Das this sollte auch kein Problem mit const bereiten, solange du nichts am Objekt änderst.</p>
<p>Aber: Wenn du deine Getter nicht als const deklariert hast, gilt auch der Aufruf der Getter als Modifizierend (der Compiler prüft nicht nach ob die getter nichts ändert, andersherum meckert er aber wenn du etwas als const deklariertes änderst). Daher: Alle Methoden die keine Member ändern immer als const deklarieren [Siehe auch <a href="http://www.possibility.com/Cpp/const.html" rel="nofollow">hier</a>].</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531846</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 Jun 2008 19:30:14 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Thu, 19 Jun 2008 12:34:41 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>also habe jetzt nochmal getestet und es funktioniert soweit alles <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Dafür danke ich nochmal.<br />
Jetzt habe ich aber noch ein kleines problem entdeckt.</p>
<p>Meine Klasse Fahrzeug hat ja eine Liste aus Zeigern die auf Teile objekte zeigt.</p>
<pre><code class="language-cpp">std::list&lt;Teile*&gt; alleTeile;
</code></pre>
<p>jetzt will ich alle Teile objekte die ich dort eingefügt habe ausgeben, bekomme dort aber Fehlermeldungen</p>
<pre><code class="language-cpp">void Fahrzeug::showTeile() const {
	list&lt;Teile*&gt;::iterator pos;

	for(pos = alleTeile.begin(); pos != alleTeile.end(); pos++) {
		pos-&gt;printData();

	}
}
</code></pre>
<pre><code class="language-cpp">error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::list&lt;_Ty&gt;::_Const_iterator&lt;_Secure_validation&gt;'
akzeptiert (oder keine geeignete Konvertierung möglich)
</code></pre>
<pre><code class="language-cpp">error C2839: Ungültiger Rückgabetyp 'Teile **' für überladenen Operator
 '-&gt;'
</code></pre>
<pre><code class="language-cpp">error C2039: 'printData': Ist kein Element von 'std::list&lt;_Ty&gt;::_Iterator&lt;_Secure_validation&gt;'
</code></pre>
<p>Hättest du da auch noch eine Idee woran das liegen könnte?</p>
<p>MFG</p>
<p>michl`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532211</guid><dc:creator><![CDATA[michl*]]></dc:creator><pubDate>Thu, 19 Jun 2008 12:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Thu, 19 Jun 2008 12:58:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Fahrzeug::showTeile() const {
    list&lt;Teile*&gt;::const_iterator pos;

    for(pos = alleTeile.begin(); pos != alleTeile.end(); pos++) {
        (*pos)-&gt;printData();

    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1532235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532235</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 19 Jun 2008 12:58:33 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Thu, 19 Jun 2008 13:24:25 GMT]]></title><description><![CDATA[<p>und wenn wir schon bei der Schleife sind noch 2 Kleinigkeiten:<br />
a) ++i ist i++ vorzuziehen, solange es keine Gründe dagegen gibt.<br />
Wenn man sich nicht auf die Optimierung des Compilers verlassen will bedeutet ++i ein temporäres Objekt weniger als i++.<br />
b) Bedenke welche Ausdrücke mehrfach ausgeführt werden, und versuche unnötige Aufrufe zu vermeigen:</p>
<p>for(&lt;Einmal zum Start&gt;;&lt;Jedesmal zum Schleifenbegin&gt;;&lt;Jedesmal zum Schleifenende&gt;)</p>
<pre><code class="language-cpp">// Bei mir sähe der Code so aus:
    void Fahrzeug::showTeile() const
    {
        for(list&lt;Teile*&gt;::const_iterator pos = alleTeile.begin(),
          end = alleTeile.end(); pos != end; ++pos)
            (*pos)-&gt;printData();
    }
}
</code></pre>
<p>Alternativ kann man die Deklaration der beiden Iteratoren pos und end natürlich auch aus dem Schleifenkopf ziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532260</guid><dc:creator><![CDATA[asc@ausgeloggt]]></dc:creator><pubDate>Thu, 19 Jun 2008 13:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Thu, 19 Jun 2008 13:29:36 GMT]]></title><description><![CDATA[<p>Auch ein Standardalgorithmus kommt in Betracht</p>
<pre><code class="language-cpp">void Fahrzeug::showTeile() const
    {
        std::for_each( alleTeile.begin(), alleTeile.end(), std::mem_fun( &amp;Teile::printData ) );
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1532265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532265</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 19 Jun 2008 13:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 25 Jun 2008 09:54:36 GMT]]></title><description><![CDATA[<p>Ich danke allen recht herzlich für die vielen antworten. Hatte leider die ganze zeit kein Inet, deswegen hat es etwas länger gedauert.</p>
<p>Hab diese Variante genommen:</p>
<pre><code class="language-cpp">// Bei mir sähe der Code so aus:
    void Fahrzeug::showTeile() const
    {
        for(list&lt;Teile*&gt;::const_iterator pos = alleTeile.begin(),
          end = alleTeile.end(); pos != end; ++pos)
            (*pos)-&gt;printData();
    }
}
</code></pre>
<p>Funktioniert alles <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Könnte mir vielleicht nur noch jemand erklären warum man bei</p>
<pre><code class="language-cpp">(*pos)-&gt;printData();
</code></pre>
<p>die Klammern um das *pos macht?</p>
<p>MFG</p>
<p>michl`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535387</guid><dc:creator><![CDATA[michl*]]></dc:creator><pubDate>Wed, 25 Jun 2008 09:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Klassen die sich gegenseitig einbinden. on Wed, 25 Jun 2008 09:59:58 GMT]]></title><description><![CDATA[<p>Das ist wegen der Rangfolge der Operatoren. -&gt; hat eine höhere Priorität als * weswegen es zuerst ausgwertet würde. Durch die Klammerung veränderst du das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1535392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1535392</guid><dc:creator><![CDATA[Braunstein (off)]]></dc:creator><pubDate>Wed, 25 Jun 2008 09:59:58 GMT</pubDate></item></channel></rss>