<?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[Interaktion zwischen Objekten.]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich weiss leider nicht genau, nach welchen Suchbegriffen ich suchen soll. Das Thema wurde sicherlich schon behandelt. Also sorry erst mal für den vermeintlichen repost.</p>
<p>Ausgangssituation:<br />
Visual Studio 2005<br />
CLR - Klassenbibliothek<br />
Eine öffentliche Klasse main<br />
Die Klasse main hat jetzt z.B. Methoden zur berechnung sagen wir mal des Kreisumfangs.<br />
Die DLL hat noch ein Formular zur Eingabe und Ausgabe der Daten (Radius und Umfang)</p>
<p>Folgendes Problem:<br />
Ich rufe aus main das Formular auf.<br />
Ich möchte die Methode aus main im Formular zur Berechnung verwenden.<br />
Dazu brauche ich ja eine Referenz auf das Objekt main.<br />
Dazu muss ich das Formular ja schon mit der Refernez auf das Objekt main (this) als Parameter aufrufen.</p>
<p>Jetzt hab ich dann aber ein Problem mit den Header-Dateien:<br />
Entweder ich include zu erst die Header-Datei für das Formular, dann ist main als Typ im Formular unbekannt -&gt; Fehler, oder anderes herum, dann ist das Formular in main nicht bekannt -&gt; Fehler.</p>
<p>Ich hoffe ich habe das jetzt so erklärt, dass Ihr wisst was ich meine.</p>
<p>Also auf den Punkt gebracht:<br />
Was muss man machen, dass 2 Objeke gegenseitig Methoden aufrufen können; Ich muss ja eine Header Datei als erstes includen angeben.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/164423/interaktion-zwischen-objekten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 21:44:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/164423.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Nov 2006 07:47:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 07:47:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich weiss leider nicht genau, nach welchen Suchbegriffen ich suchen soll. Das Thema wurde sicherlich schon behandelt. Also sorry erst mal für den vermeintlichen repost.</p>
<p>Ausgangssituation:<br />
Visual Studio 2005<br />
CLR - Klassenbibliothek<br />
Eine öffentliche Klasse main<br />
Die Klasse main hat jetzt z.B. Methoden zur berechnung sagen wir mal des Kreisumfangs.<br />
Die DLL hat noch ein Formular zur Eingabe und Ausgabe der Daten (Radius und Umfang)</p>
<p>Folgendes Problem:<br />
Ich rufe aus main das Formular auf.<br />
Ich möchte die Methode aus main im Formular zur Berechnung verwenden.<br />
Dazu brauche ich ja eine Referenz auf das Objekt main.<br />
Dazu muss ich das Formular ja schon mit der Refernez auf das Objekt main (this) als Parameter aufrufen.</p>
<p>Jetzt hab ich dann aber ein Problem mit den Header-Dateien:<br />
Entweder ich include zu erst die Header-Datei für das Formular, dann ist main als Typ im Formular unbekannt -&gt; Fehler, oder anderes herum, dann ist das Formular in main nicht bekannt -&gt; Fehler.</p>
<p>Ich hoffe ich habe das jetzt so erklärt, dass Ihr wisst was ich meine.</p>
<p>Also auf den Punkt gebracht:<br />
Was muss man machen, dass 2 Objeke gegenseitig Methoden aufrufen können; Ich muss ja eine Header Datei als erstes includen angeben.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170891</guid><dc:creator><![CDATA[Ueberflasher]]></dc:creator><pubDate>Wed, 08 Nov 2006 07:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 07:53:02 GMT]]></title><description><![CDATA[<p>Das richtige Stichwort lautet &quot;Forward Deklaration&quot;:</p>
<pre><code class="language-cpp">//Form.h

class Main;

class Form
{
public:
  void run(Main* pMain);
  ...
};
</code></pre>
<pre><code class="language-cpp">//Main.h

#include &quot;Form.h&quot;

class Main
{
public:
  void run()
  {
    Form theForm;
    theForm.run(this);
  }
};
</code></pre>
<p>(btw ist der Name &quot;main&quot; afaik für die Hauptfunktion eines Programmes reserviert - wenn du eine Klasse so benennst, könnte es Probleme geben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170893</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Nov 2006 07:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 07:54:37 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort. Werde ich mal testen.</p>
<p>Natürlich heißt die Methode nicht main, war nur ein Beispiel; Aber zugegeben ein ziemlich Blödes <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/1170894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170894</guid><dc:creator><![CDATA[Ueberflasher]]></dc:creator><pubDate>Wed, 08 Nov 2006 07:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 08:27:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>funktioniert leider so nicht...</p>
<pre><code class="language-cpp">// TestForwardDeklaration.h

#pragma once

using namespace System;

namespace TestForwardDeklaration {

	public ref class Init
	{
	public:
		TestForwardDeklaration::Formular^ Form1;

		Init();
		void Message(String^ text);
	};
}
</code></pre>
<pre><code class="language-cpp">//TestForwardDeklaration.cpp
// Dies ist die Haupt-DLL.

#include &quot;stdafx.h&quot;
#include &quot;Formular.h&quot;
#include &quot;TestForwardDeklaration.h&quot;

TestForwardDeklaration::Init::Init() {
	Form1 = gcnew Formular(this);
}

void TestForwardDeklaration::Init::Message(String^ text) {
	MessageBox::Show(text);
}
</code></pre>
<pre><code class="language-cpp">//Fourmular.h
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

namespace TestForwardDeklaration {

	//Forward Deklaration
	ref class Init;

	/// &lt;summary&gt;
	/// Zusammenfassung für Formular
	///
	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
	///          arbeiten, die diesem Formular zugewiesen sind.
	/// &lt;/summary&gt;
	public ref class Formular : public System::Windows::Forms::Form
	{
	public:
		Formular(Init^ Parent)
		{
			InitializeComponent();
			//
			//TODO: Konstruktorcode hier hinzufügen.
			//
			Parent-&gt;Message(&quot;test&quot;);
		}
...
</code></pre>
<pre><code class="language-cpp">//Fourmular.cpp

#include &quot;StdAfx.h&quot;
#include &quot;Formular.h&quot;
</code></pre>
<p>Alle Anderen Dateien sind wie von VS2005 erstellt.</p>
<blockquote>
<p>Fehler 1 error C2027: Verwendung des undefinierten Typs &quot;TestForwardDeklaration::Init&quot; c:\_intern\coding\projekte\testforwarddeklaration\testforwarddeklaration\Formular.h 34<br />
Fehler 2 error C2227: Links von &quot;-&gt;Message&quot; muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. c:\_intern\coding\projekte\testforwarddeklaration\testforwarddeklaration\Formular.h 34</p>
</blockquote>
<p>Liegt das am managed code? Oder hab ich da noch nen Anderen Fehler drin?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170913</guid><dc:creator><![CDATA[Ueberflasher]]></dc:creator><pubDate>Wed, 08 Nov 2006 08:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 08:33:23 GMT]]></title><description><![CDATA[<p>Nein, das liegt daran, daß du die falsche Klasse Forward deklariert hast. Die Klasse 'Init' muß wissen, daß es eine Klasse 'Formular' gibt, also mußt du es ihr auch sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170923</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Nov 2006 08:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 09:08:51 GMT]]></title><description><![CDATA[<p>Sorry ich steh aufm Schlauch.</p>
<p>Wie sieht das dann in diesem Beipiel richtig aus?</p>
<p>MainObj -&gt; erstellt Formular und gibt Refernz auf sich selbst mit.<br />
Formular -&gt; soll im Konstruktor auf eine Methode von MainObj zugreifen.</p>
<p>Ich verteh das Prinzip noch nicht ganz.</p>
<p>Es gibt da zwei Varianten:<br />
Objekt2 wurde in Objekt1 erstellt und soll auf Mehtoden von Objekt1 zugreifen (wie oben)<br />
Objekt1 und Objekt2 sind absolut unabhängig und bekommen während der Laufzeit die Refernz auf das jeweillig andere Objekt zugewiesen und können dann gegenseitig Methoden aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170940</guid><dc:creator><![CDATA[Ueberflasher]]></dc:creator><pubDate>Wed, 08 Nov 2006 09:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 09:22:05 GMT]]></title><description><![CDATA[<p>In dem Fall hängt es von der Reihenfolge der eingebundenen Header ab, wer eine Forward Deklaration benötigt - Die Klasse, die als erstes kommt, braucht eine Deklaration ihrer Partnerklasse (für die zweite Klasse steht ja schon die Definition da). Aber auf der sicheren Seite bist du, wenn du für beide Klassen eine Forward Deklaration hinsetzt:</p>
<pre><code class="language-cpp">//MainObj.h
class Formular;

class MainObj
{
public:
  Formular* form;
  void init();
  void run();
  void print(std::string test) {cout&lt;&lt;test&lt;&lt;endl;}
};

//MainObj.cpp
#include &quot;MainObj.h&quot;
#include &quot;Formular.h&quot;

void MainObj::init()
{
  form = new Formular(this);
}

void MainObj::run()
{
  form-&gt;calculate();
}
</code></pre>
<pre><code class="language-cpp">//Formular.h
class MainObj;
class Formular
{
  MainObj* parent;
public:
  Formular(MainObj* p);
  void calculate();
}

//Formular.cpp
#include &quot;Formular.h&quot;
#include &quot;MainObj.h&quot;

Formular::Formular(MainObj* p) : parent(p) {}

void Formular::calculate()
{
  parent-&gt;print(&quot;Dies ist ein Test&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1170948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170948</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Nov 2006 09:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 12:56:56 GMT]]></title><description><![CDATA[<p>Ahh, danke.</p>
<p>Ich hab mir das jetzt so umgebaut:</p>
<pre><code class="language-cpp">// stdafx.h : Includedatei für Standardsystem-Includedateien
// oder häufig verwendete projektspezifische Includedateien,
// die nur in unregelmäßigen Abständen geändert werden.

#pragma once
#include &quot;class1.h&quot;

#include &quot;form1.h&quot;
#include &quot;form2.h&quot;

#include &quot;maincode.h&quot;
</code></pre>
<pre><code class="language-cpp">// stdafx.cpp
#include &quot;stdafx.h&quot;

namespace dll {

	// forward declaration
	// Libs
	ref class class1;
	// Forms
	ref class form1;
	ref class form2;
	// Main
	ref class maincode;
}
</code></pre>
<pre><code class="language-cpp">// maincode
#include &quot;stdafx.h&quot;

namespace dll {
	public ref class maincode {
            ...
        };
}
</code></pre>
<p>Die Namen sind natürlich beispielhaft zu verstehen. <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>Macht man das eigentlich prinzipiell so, oder nur nach Bedarf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171064</guid><dc:creator><![CDATA[Ueberflasher]]></dc:creator><pubDate>Wed, 08 Nov 2006 12:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 13:04:25 GMT]]></title><description><![CDATA[<p>Also in der stdafx.<strong>cpp</strong> sind die Forward's auf jeden Fall fehl am Platz, schlißlich wird die erstens nirgends eingebunden (und in anderen Übersetzungseinheiten erfährt der Compiler nichts davon) und hat zweitens über die stdafx.h schon die kompletten Definitionen erhalten. Die Forward Deklarationen benötigst du in der maincode.h etc, bevor du die Nachbarklassen verwenden kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171067</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 08 Nov 2006 13:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 13:33:17 GMT]]></title><description><![CDATA[<p>Die stdafx.cpp ist eigentlich nur eine Dummy-Datei, da schreibt man nichts rein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171091</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 08 Nov 2006 13:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 16:04:57 GMT]]></title><description><![CDATA[<p>Hoi, gut zu wissen.</p>
<p>Aber...<br />
Also wenn ich nen Formular anlege, dann schreibt das VS2005 ja standardmässig<br />
#include &quot;StdAfx.h&quot; in die cpp-Datei des Formulars, bzw. in die cpp-Datei eines neuen Projekts.</p>
<p>Und aufgrund der Info in der &quot;stdafx.h&quot; bin ich mal davon ausgegangen, dass die Datei genau für so etwas da ist.</p>
<pre><code class="language-cpp">// stdafx.h : Includedatei für Standardsystem-Includedateien
// oder häufig verwendete projektspezifische Includedateien,
// die nur in unregelmäßigen Abständen geändert werden.
</code></pre>
<p>Hat eingetlich ganz gut funktioniert so. Aber man kann es ja genau so in die Dateien (.cpp/.h) des eigentlichen Codes packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171248</guid><dc:creator><![CDATA[Ueberflasher]]></dc:creator><pubDate>Wed, 08 Nov 2006 16:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to Interaktion zwischen Objekten. on Wed, 08 Nov 2006 16:23:20 GMT]]></title><description><![CDATA[<p>Also in die stdafx.h kannst du ja was reinschreiben, halt Header-Dateien die du öffters in deinem Projekt verwendest und die z.B. komplex sind (STL-Header sind komplex oder die windows.h ist riesig). Aber die stdafx.cpp ist ein Dummy, die mußt du so lassen wie sie ist (da fehlt leider ein autom. generierter Kommentar nach dem Motto &quot;Diese Datei darf nicht geändert werden!&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171263</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 08 Nov 2006 16:23:20 GMT</pubDate></item></channel></rss>