<?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[Problem bei wechselseitig verlinkten Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>eigl. habe ich etwas in der Richtung Klasse vom Typ eins enthaelt Zeiger auf KLasse vom Typ 2, die wiederum einen Zeiger auf Klasse vom Typ 1 enthaelt, vor. Als kleine Verstaendnishilfe habe ich hier mal ein Minimalbeispiel:</p>
<p>Klasse 1:</p>
<pre><code>#ifndef CLASS1_H_
#define CLASS1_H_

#include &quot;class2.h&quot;

class class1
{
 public:
  class1(char *name, class2 *c)
    {
      c2 = c;
      c2-&gt;register(this);
      this-&gt;name = name;
    }
  ;

  void print(void)
  {
    ::std::cout &lt;&lt; name &lt;&lt; &quot; &quot; &lt;&lt; c2-&gt;name &lt;&lt; endl;
  }
  ;

  char *name;

  class2 *c2;
}
#endif
</code></pre>
<p>Klasse 2:</p>
<pre><code>#ifndef CLASS2_H_
#define CLASS2_H_

#include &quot;class1.h&quot;

#include &lt;iostream&gt;

class class2
{
 public:

  class2(char *name)
    {
      this-&gt;name = name;
    }
  ;

  void register(class1 *c1)
  {
    this-&gt;c1 = c1;
  }
  ;

  void print(void)
  {
    ::std::cout &lt;&lt; name &lt;&lt; &quot; &quot; &lt;&lt; c1-&gt;name &lt;&lt; endl;
  }
  ;

  char *name;
  class1 *c1;
}

#endif
</code></pre>
<p>Und eine Mainmethode:</p>
<pre><code>#include &quot;class1.h&quot;
#include &quot;class2.h&quot;

int main(int argc, char *argv)
{
  class2 *c2 = new class2(&quot;Klasse 2&quot;);
  class1 *c1 = new class1(&quot;Klasse 1&quot;, c2);

  c1-&gt;print();
  c2-&gt;print();

  delete c1;
  delete c2;

  return 0;
}
</code></pre>
<p>Versucht man das zu uebersetzen erhaelt man (ich) :</p>
<pre><code>g++ main.cc
class2.h:19: error: expected `)' before ‘*’ token
class2.h:32: error: ISO C++ forbids declaration of ‘class1’ with no type
class2.h:32: error: expected ‘;’ before ‘*’ token
class2.h: In member function ‘void class2::print()’:
class2.h:27: error: ‘c1’ was not declared in this scope
class2.h:27: error: ‘endl’ was not declared in this scope
class1.h: In constructor ‘class1::class1(char*, class2*)’:
class1.h:12: error: expected unqualified-id before ‘register’
class1.h:12: error: expected `;' before ‘register’
class1.h: In member function ‘void class1::print()’:
class1.h:19: error: ‘endl’ was not declared in this scope
main.cc: At global scope:
main.cc:5: error: new types may not be defined in a return type
main.cc:5: note: (perhaps a semicolon is missing after the definition of ‘class2’)
main.cc:5: error: two or more data types in declaration of ‘main’
main.cc:5: error: ‘::main’ must return ‘int’
make: *** [all] Fehler 1
</code></pre>
<p>Erwaehnen sollte icheventuell noch, dass ich den GCC nutze.</p>
<p>Ich bin in C++ nicht so bewandert, vermute aber, dass es mit dem wechselseitigen Einbinden der Headerdateien zusammenhaengen koennte. class1.h bindet class2.h ein, die wiederum class1.h einbindet...ein endloses Einbinden ist zwar offenbar durch die #ifdef s verhindert, aber anscheinend fehlt gerade deswegen class2.h die Deklaration von class1. Gibt es aber generell ueberhaupt keine Moeglichketi, sowas zu realisieren ( in Java tut es das wohl, daher stammt meine Idee, das Ganze so aufzubauen...). Fuer Anregungen/ Hinweise o Ae. waere ich dankbar:)</p>
<p>Gruss &amp; Danke<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208904/problem-bei-wechselseitig-verlinkten-klassen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 06:39:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208904.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Mar 2008 12:47:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei wechselseitig verlinkten Klassen on Mon, 24 Mar 2008 13:20:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>eigl. habe ich etwas in der Richtung Klasse vom Typ eins enthaelt Zeiger auf KLasse vom Typ 2, die wiederum einen Zeiger auf Klasse vom Typ 1 enthaelt, vor. Als kleine Verstaendnishilfe habe ich hier mal ein Minimalbeispiel:</p>
<p>Klasse 1:</p>
<pre><code>#ifndef CLASS1_H_
#define CLASS1_H_

#include &quot;class2.h&quot;

class class1
{
 public:
  class1(char *name, class2 *c)
    {
      c2 = c;
      c2-&gt;register(this);
      this-&gt;name = name;
    }
  ;

  void print(void)
  {
    ::std::cout &lt;&lt; name &lt;&lt; &quot; &quot; &lt;&lt; c2-&gt;name &lt;&lt; endl;
  }
  ;

  char *name;

  class2 *c2;
}
#endif
</code></pre>
<p>Klasse 2:</p>
<pre><code>#ifndef CLASS2_H_
#define CLASS2_H_

#include &quot;class1.h&quot;

#include &lt;iostream&gt;

class class2
{
 public:

  class2(char *name)
    {
      this-&gt;name = name;
    }
  ;

  void register(class1 *c1)
  {
    this-&gt;c1 = c1;
  }
  ;

  void print(void)
  {
    ::std::cout &lt;&lt; name &lt;&lt; &quot; &quot; &lt;&lt; c1-&gt;name &lt;&lt; endl;
  }
  ;

  char *name;
  class1 *c1;
}

#endif
</code></pre>
<p>Und eine Mainmethode:</p>
<pre><code>#include &quot;class1.h&quot;
#include &quot;class2.h&quot;

int main(int argc, char *argv)
{
  class2 *c2 = new class2(&quot;Klasse 2&quot;);
  class1 *c1 = new class1(&quot;Klasse 1&quot;, c2);

  c1-&gt;print();
  c2-&gt;print();

  delete c1;
  delete c2;

  return 0;
}
</code></pre>
<p>Versucht man das zu uebersetzen erhaelt man (ich) :</p>
<pre><code>g++ main.cc
class2.h:19: error: expected `)' before ‘*’ token
class2.h:32: error: ISO C++ forbids declaration of ‘class1’ with no type
class2.h:32: error: expected ‘;’ before ‘*’ token
class2.h: In member function ‘void class2::print()’:
class2.h:27: error: ‘c1’ was not declared in this scope
class2.h:27: error: ‘endl’ was not declared in this scope
class1.h: In constructor ‘class1::class1(char*, class2*)’:
class1.h:12: error: expected unqualified-id before ‘register’
class1.h:12: error: expected `;' before ‘register’
class1.h: In member function ‘void class1::print()’:
class1.h:19: error: ‘endl’ was not declared in this scope
main.cc: At global scope:
main.cc:5: error: new types may not be defined in a return type
main.cc:5: note: (perhaps a semicolon is missing after the definition of ‘class2’)
main.cc:5: error: two or more data types in declaration of ‘main’
main.cc:5: error: ‘::main’ must return ‘int’
make: *** [all] Fehler 1
</code></pre>
<p>Erwaehnen sollte icheventuell noch, dass ich den GCC nutze.</p>
<p>Ich bin in C++ nicht so bewandert, vermute aber, dass es mit dem wechselseitigen Einbinden der Headerdateien zusammenhaengen koennte. class1.h bindet class2.h ein, die wiederum class1.h einbindet...ein endloses Einbinden ist zwar offenbar durch die #ifdef s verhindert, aber anscheinend fehlt gerade deswegen class2.h die Deklaration von class1. Gibt es aber generell ueberhaupt keine Moeglichketi, sowas zu realisieren ( in Java tut es das wohl, daher stammt meine Idee, das Ganze so aufzubauen...). Fuer Anregungen/ Hinweise o Ae. waere ich dankbar:)</p>
<p>Gruss &amp; Danke<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479541</guid><dc:creator><![CDATA[vidar]]></dc:creator><pubDate>Mon, 24 Mar 2008 13:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei wechselseitig verlinkten Klassen on Mon, 24 Mar 2008 13:29:32 GMT]]></title><description><![CDATA[<p>Um das Problem zu umgehen, würde man grob so vorgehen:</p>
<pre><code class="language-cpp">class class1;
/* Jetzt gibt es die Klasse class1, Zeiger können angelegt werden,
   auf Member kann aber noch nicht zugegriffen werden. Daher: */
class class2 { /* Alle Methoden (ohne Rumpf) und Variablen deklarieren. */ }
class class1 { /* Alles definieren. */ }
/* Jetzt ist auch class1 vollständig bekannt und es können die
   Methoden von class2 vollständig definiert werden: */
class2::class2(char *name) {
/* ... */
}
/* ... */
</code></pre>
<p>Achja, und auf cout und endl aus dem std namespace wird so zugegriffen:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;...&quot; &lt;&lt; std::endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1479569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479569</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Mon, 24 Mar 2008 13:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei wechselseitig verlinkten Klassen on Mon, 24 Mar 2008 13:33:40 GMT]]></title><description><![CDATA[<p>Siehe<br />
<a href="https://www.google.de/search?&amp;q=vorw%C3%A4rtsdeklaration" rel="nofollow">Google: vorwärtsdeklaration</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479576</guid><dc:creator><![CDATA[mmm]]></dc:creator><pubDate>Mon, 24 Mar 2008 13:33:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei wechselseitig verlinkten Klassen on Tue, 25 Mar 2008 16:57:44 GMT]]></title><description><![CDATA[<p>Danke fuer die Hilfe, die Fehlerzahl hat sich nach einigen Aenderungen doch reduziert, es gibt aber nach wie vor welche:</p>
<pre><code>class2.h:15: error: expected `)' before ‘*’ token
class2.h: In constructor ‘class1::class1(char*, class2*)’:
class2.h:41: error: expected unqualified-id before ‘register’
class2.h:41: error: expected `;' before ‘register’
class2.h: At global scope:
class2.h:59: error: expected unqualified-id before ‘register’
make: *** [all] Fehler 1
</code></pre>
<p>Entsprechend oben habe ich das Ganze so umgebaut:</p>
<p>class2.h:</p>
<pre><code>#ifndef CLASS2_H_
#define CLASS2_H_

#include &lt;iostream&gt;

class class1;

class class2
{
 public:

  class2(char *name);

  void register(class1 *c1);

  void print(void);

  char *name;
  class1 *c1;
}
;

class class1
{
 public:
  class1(char *name, class2 *c);

  void print(void);

  char *name;

  class2 *c2;
}
;

class1::class1(char *name, class2 *c)
{
  c2 = c;
  c2-&gt;register(this);
  this-&gt;name = name;
}
;

void class1::print(void)
{
  ::std::cout &lt;&lt; name &lt;&lt; &quot; &quot; &lt;&lt; c2-&gt;name &lt;&lt; ::std::endl;
}
;

class2::class2(char *name)
{
  this-&gt;name = name;
}
;

void class2::register(class1 *c1)
{
  this-&gt;c1 = c1;
}
;

void class2::print(void)
{
  ::std::cout &lt;&lt; name &lt;&lt; &quot; &quot; &lt;&lt; c1-&gt;name &lt;&lt; ::std::endl;
}
;

#endif
</code></pre>
<p><a href="http://main.cc" rel="nofollow">main.cc</a>:</p>
<pre><code>#include &quot;class2.h&quot;

int main(int argc, char *argv)
{
  class2 *c2 = new class2(&quot;Klasse 2&quot;);
  class1 *c1 = new class1(&quot;Klasse 1&quot;, c2);

  c1-&gt;print();
  c2-&gt;print();

  delete c1;
  delete c2;

  return 0;
}
</code></pre>
<p>Woran kann das liegen?</p>
<p>Gruss<br />
mIchael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480168</guid><dc:creator><![CDATA[vidar]]></dc:creator><pubDate>Tue, 25 Mar 2008 16:57:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei wechselseitig verlinkten Klassen on Tue, 25 Mar 2008 17:11:53 GMT]]></title><description><![CDATA[<p>Was für einen Editor verwendest du (ohne Syntax-Highlighing !!!)?</p>
<pre><code class="language-cpp">register int x = 0; // register ist ein reserviertes Schlüsselwort
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1480183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480183</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 25 Mar 2008 17:11:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei wechselseitig verlinkten Klassen on Tue, 25 Mar 2008 18:13:27 GMT]]></title><description><![CDATA[<p>Stimmt ja, hatte ich gar nicht mehr dran gedacht...bin irgendwie zur Zeit etwas verplant...Danke! Nahc Umbenennen laeuft das Ganze wie gewuenscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480215</guid><dc:creator><![CDATA[vidar]]></dc:creator><pubDate>Tue, 25 Mar 2008 18:13:27 GMT</pubDate></item></channel></rss>