<?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[Zyklische Includes]]></title><description><![CDATA[<p>Hi, bin neu hier und bräuchte etwas Hilfe bei einem Projekt.</p>
<p>Genauer gesagt habe ich zwei Strukturen, bei denen das folgende Problem auftritt:</p>
<pre><code class="language-cpp">//structA.h
#include &quot;structB.h&quot;
struct A
{
  int xy;
  //....
  std::list&lt;B*&gt; bListe;
};

//structB.h
#include &quot;structA.h&quot;
struct B
{
  //...
  A aObjekt;
};
</code></pre>
<p>In dieser Form kann das nicht funktionieren, da in den Includes ein Zyklus entsteht. Allerdings habe ich noch keine Möglichkeit gefunden, wie ich so eine Abhängigkeit umgesetzt bekomme.<br />
Ich habe auch schon versucht statt den expliziten Pointern void-zeigerzu verwenden, aber das Rück-Casting funktioniert dann nicht mehr, so dass ich keine<br />
benötigten Funktionen mehr verwenden kann.</p>
<p>Ich freue mich auf eure Hilfe.</p>
<p>MfG</p>
<p>DiZZ</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204889/zyklische-includes</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 20:26:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204889.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Feb 2008 21:08:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zyklische Includes on Thu, 07 Feb 2008 21:08:13 GMT]]></title><description><![CDATA[<p>Hi, bin neu hier und bräuchte etwas Hilfe bei einem Projekt.</p>
<p>Genauer gesagt habe ich zwei Strukturen, bei denen das folgende Problem auftritt:</p>
<pre><code class="language-cpp">//structA.h
#include &quot;structB.h&quot;
struct A
{
  int xy;
  //....
  std::list&lt;B*&gt; bListe;
};

//structB.h
#include &quot;structA.h&quot;
struct B
{
  //...
  A aObjekt;
};
</code></pre>
<p>In dieser Form kann das nicht funktionieren, da in den Includes ein Zyklus entsteht. Allerdings habe ich noch keine Möglichkeit gefunden, wie ich so eine Abhängigkeit umgesetzt bekomme.<br />
Ich habe auch schon versucht statt den expliziten Pointern void-zeigerzu verwenden, aber das Rück-Casting funktioniert dann nicht mehr, so dass ich keine<br />
benötigten Funktionen mehr verwenden kann.</p>
<p>Ich freue mich auf eure Hilfe.</p>
<p>MfG</p>
<p>DiZZ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451600</guid><dc:creator><![CDATA[DiZZ]]></dc:creator><pubDate>Thu, 07 Feb 2008 21:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Thu, 07 Feb 2008 21:16:05 GMT]]></title><description><![CDATA[<p>Stichwort Foward-Deklaration.</p>
<p>Bei Pointern reicht es aus, wenn der Typ bekannt gemacht wird:</p>
<pre><code class="language-cpp">//structA.h
struct B;

struct A
{
  int xy;
  //....
  std::list&lt;B*&gt; bListe;
};

//structB.h
#include &quot;structA.h&quot;
struct B
{
  //...
  A aObjekt;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1451609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451609</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Thu, 07 Feb 2008 21:16:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Thu, 07 Feb 2008 21:23:56 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>danke für die schnelle Antwort, aber leider bekomme ich keine korrekten Werte, wenn<br />
ich später funktionen aus B aufrufen will.<br />
Das sieht dann nach zufälligen Werten aus dem Speicher aus.<br />
Alle Variablen aus der Struktur haben nur noch sinnlosen inhalt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451615</guid><dc:creator><![CDATA[DiZZ]]></dc:creator><pubDate>Thu, 07 Feb 2008 21:23:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Thu, 07 Feb 2008 21:26:05 GMT]]></title><description><![CDATA[<p>Mehr Code <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/1451617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451617</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 07 Feb 2008 21:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Thu, 07 Feb 2008 21:37:31 GMT]]></title><description><![CDATA[<p>Hm ok mal schauen - ich such mal raus was geht...</p>
<pre><code class="language-cpp">//particle.h
#include &lt;vector&gt;
#include &lt;math.h&gt;
#include &quot;vector.h&quot;
#include &quot;spring.h&quot;

//...

struct Particle {
  DclVector  position;
  DclVector  velocity;
  DclVector  force;
  double  mass;

  //...

  //...

  std::vector&lt;spring*&gt; springs;
};

extern std::vector&lt;Particle&gt; vectorParticles;

//spring.h
#ifndef SPRING_H
#define SPRING_H

struct Particle;

struct spring
{
	double springConstant;
	double initLength;
	double currLength;

	Particle* mp0;
	Particle* mp1;

	//...

	spring(Particle* m0, Particle* m1, double spCon, double length)
	{
		springConstant = spCon;
		initLength = currLength = length;
		mp0 = m0;
		mp1 = m1;
	}

	Particle* getPartner(Particle* self)
	{
		return self==mp0 ? mp1 : mp0;
	}
};

#endif

//Simulation.cpp

//....

void addSpring(Particle&amp; p1, Particle&amp; p2, double spConst = 1.0)
{
	spring* s = new spring(&amp;p1, &amp;p2, spConst, (p1.position - p2.position).length());
	p1.springs.push_back(s);
	p2.springs.push_back(s);
}

//...

void makeCube(double x, double y, double z, double size)
{
	Particle particle[27];

        //...

	for(int i = 0; i &lt; 27; i++)
	{
		if(i%3 == 0)
		{
			addSpring(particle[i], particle[i+1]);
			addSpring(particle[i+1], particle[i+2]);
		}
		if(i &lt; 9)
		{
			addSpring(particle[i], particle[i+9]);
			addSpring(particle[i+9], particle[i+18]);
		}
		if(i%9 == 0 || i%9 == 1 || i%9 == 2)
		{
			addSpring(particle[i], particle[i+3]);
			addSpring(particle[i+3], particle[i+6]);
		}
	}

	for(int i = 0; i &lt; 27; i++)
	{
		particle[i].force.clear();
		particle[i].mass = 1.0;
		particle[i].integration = EulerCromer;
		particle[i].r = particle[i].g = particle[i].b = 1.0;
		vectorParticles.push_back(particle[i]);
	}
}

//....

void  addForces(Particle&amp; particle)
{
	DclVector spring;
  particle.force += DclVector(0, 1.0, 0) * particle.mass * -9.81; // gravitational force
  for (int sp = 0; sp &lt; particle.springs.size(); sp ++)
  {
//////////////////////////////////////////////////////////////////
// Hier gibts probs zur runtime

	spring = particle.position - (particle.springs[sp]-&gt;getPartner(&amp;particle))-&gt;position;  

//////////////////////////////////////////////////////////////////

	spring.normalize();
	particle.force += spring*((particle.springs[sp]-&gt;initLength - particle.springs[sp]-&gt;currLength)*particle.springs[sp]-&gt;springConstant);
  }
}

//...
</code></pre>
<p>^^so das ist mal nen größerer Ausschnitt. Vielleicht habe ich ja auch nur einen anderen kleinen Fehler gemacht. *hoff* <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>Das Projekt ist leider schon sehr groß - ich hoffe ich hab nichts wichtiges vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451626</guid><dc:creator><![CDATA[DiZZ]]></dc:creator><pubDate>Thu, 07 Feb 2008 21:37:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Thu, 07 Feb 2008 21:52:13 GMT]]></title><description><![CDATA[<p>Bitte nur den relevanten Code und den Code posten wodurch der Fehler verursacht wird, damit wir das genau nachvollziehen können. Aber vllt hat ja einer Lust und schaut sich das an <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/1451631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451631</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 07 Feb 2008 21:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Thu, 07 Feb 2008 21:58:56 GMT]]></title><description><![CDATA[<p>^^jaja erst mehr code wollen und dann keine Lust mehr <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 />
ich denke das meiste davon ist schon relevant - ausser man kürzt das so wie ich es am Anfang gemacht habe - bin nur der Aufforderung nachgekommen...</p>
<p>Also wer keine Lust hat - ich freu mich auch sehr über antworten zum ersten Post <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/1451636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451636</guid><dc:creator><![CDATA[DiZZ]]></dc:creator><pubDate>Thu, 07 Feb 2008 21:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Fri, 08 Feb 2008 07:46:43 GMT]]></title><description><![CDATA[<p>Sind deine Partikel denn initialisiert?</p>
<p>Du erzeugst das Array der Partikel (Standardkonstruktor vorhanden?) und arbeitest gleich damit los, zumindest in dem Codeschnipsel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451717</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 08 Feb 2008 07:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zyklische Includes on Fri, 08 Feb 2008 10:37:04 GMT]]></title><description><![CDATA[<p>Desweiteren halte ich die Speicherung der Pointer mp0 und mp1 in der Klasse für recht riskant. Du kannst innerhalb der Klasse nicht erkennen, ob diese Pointer auf gültigen Speicher zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451814</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 08 Feb 2008 10:37:04 GMT</pubDate></item></channel></rss>