<?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[Auf einem Object in einem anderem Modul zugreifen]]></title><description><![CDATA[<p>Hallo,<br />
hat Jemand dafür vieleicht eine Lösung.<br />
Ich habe eine Klasse Form1, eine Klasse rs232 sowie ein CPP Modul<br />
comunication.<br />
Im Header der Klasse Form1 erzeuge ich eine Zeiger rs232* com;<br />
Im Konstruktor von Form1 erzeuge ich ein Objekt der Klasse rs232<br />
com = new rs232;<br />
Ich möchte nun im Modul comunication auf das im Form1 erstelle Objekt<br />
zugreifen com-&gt;......., ohne die Klasse angeben zu müssen Form1-&gt;com-&gt;...<br />
Wie bekomme ich den Zeiger des Objekts com zum Modul comunications.<br />
Die instanz des Objekts com kann ich ja nicht im Header von Form1 erzeugen.</p>
<p>Sprich ich möchte die Instanz eines Objekts nur einmal erzeugen und<br />
sie allen Klassen über den Header bekannt machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/94573/auf-einem-object-in-einem-anderem-modul-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 02:46:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/94573.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Dec 2004 12:17:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Fri, 10 Dec 2004 12:34:22 GMT]]></title><description><![CDATA[<p>Hallo,<br />
hat Jemand dafür vieleicht eine Lösung.<br />
Ich habe eine Klasse Form1, eine Klasse rs232 sowie ein CPP Modul<br />
comunication.<br />
Im Header der Klasse Form1 erzeuge ich eine Zeiger rs232* com;<br />
Im Konstruktor von Form1 erzeuge ich ein Objekt der Klasse rs232<br />
com = new rs232;<br />
Ich möchte nun im Modul comunication auf das im Form1 erstelle Objekt<br />
zugreifen com-&gt;......., ohne die Klasse angeben zu müssen Form1-&gt;com-&gt;...<br />
Wie bekomme ich den Zeiger des Objekts com zum Modul comunications.<br />
Die instanz des Objekts com kann ich ja nicht im Header von Form1 erzeugen.</p>
<p>Sprich ich möchte die Instanz eines Objekts nur einmal erzeugen und<br />
sie allen Klassen über den Header bekannt machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/670262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/670262</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Fri, 10 Dec 2004 12:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Fri, 10 Dec 2004 13:27:50 GMT]]></title><description><![CDATA[<p>Such mal nach Singleton, das ist ein Entwurfsmuster (design pattern), das Dein Problem lösen könnte.<br />
Kurzgefasst brauchst die Klasse dazu folgendes:<br />
1. Einen privaten Konstruktor. Die Klasse ist folglich nicht mehr von außen instanziierbar.<br />
2. Eine statische Methode, die eine Instanz der Klasse zurückgibt.</p>
<p>Problematisch ist dabei natürlich das Freigeben von Ressourcen. In Deinem Fall wäre nicht nur Speicher dauerhaft belegt, sondern auch<br />
ein COM-Port (wenn ich das richtig interpretiert habe).</p>
<p>Ansonsten könntest Du natürlich auch jeweils die Konstruktoren der Objekte, die eine Instanz der Klasse benötigen, um einen Zeiger auf<br />
eine Instanz der Klasse erweitern.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/670309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/670309</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Fri, 10 Dec 2004 13:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Fri, 10 Dec 2004 21:34:26 GMT]]></title><description><![CDATA[<p>Hallo Alexander</p>
<p>die Instanz des Objects erzeuge sowie lösche ich in einer Klasse.</p>
<p>Ich möchte aber über den Header dieser Klasse den Zeiger auf das<br />
Object an andere Klassen übergeben, so das diese auf das<br />
Object zugreifen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/670616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/670616</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Fri, 10 Dec 2004 21:34:26 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Sun, 12 Dec 2004 18:46:09 GMT]]></title><description><![CDATA[<p>So funktioniert es:</p>
<p>In der Klasse fmain_window</p>
<pre><code class="language-cpp">rs232* com;
Tfmain_window *fmain_window;
//---------------------------------------------------------------------------
__fastcall Tfmain_window::Tfmain_window(TComponent* Owner)
     : TForm(Owner)
{
     com = new rs232;                 //Object Instanzieren
     com-&gt;baudrate = 56000;
     com-&gt;comport  = &quot;com1&quot;;
     com-&gt;timeout = 1000;
}
</code></pre>
<p>In der Klasse fthresholds wird dem Linker der Objectzeiger als extern<br />
mitgeteilt</p>
<pre><code class="language-cpp">extern rs232* com;
Tfthresholds *fthresholds;
//---------------------------------------------------------------------------
__fastcall Tfthresholds::Tfthresholds(TComponent* Owner)
	: TForm(Owner)
{
     com-&gt;write_rs232(0xaa);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/671805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/671805</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Sun, 12 Dec 2004 18:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Sun, 12 Dec 2004 18:59:26 GMT]]></title><description><![CDATA[<p>Fällt diese Lösung nicht in die Kategorie &quot;Globale Variablen&quot;?<br />
Was spricht eigentlich dagegen - wie weiter oben schon vorgeschlagen - der Klasse Tfthresholds einen Konstruktor zu verpassen,<br />
die als zusätzliches Argument einen Zeiger rs232* enthält? Sauberer wäre das allemal, da ja die Klasse Tfthresholds offenbar<br />
unbedingt eine Instanz von rs232 benötigt.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/671816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/671816</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Sun, 12 Dec 2004 18:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Sun, 12 Dec 2004 19:41:34 GMT]]></title><description><![CDATA[<p>Alexander Kempf schrieb:</p>
<blockquote>
<p>Was spricht eigentlich dagegen - wie weiter oben schon vorgeschlagen - der Klasse Tfthresholds einen Konstruktor zu verpassen,<br />
die als zusätzliches Argument einen Zeiger rs232* enthält? Sauberer wäre das allemal, da ja die Klasse Tfthresholds offenbar<br />
unbedingt eine Instanz von rs232 benötigt.</p>
</blockquote>
<p>Die Klasse Tfthresholds hat einen Konstruktor, was meist du mit &quot;die als<br />
Argument einen zusätzlichen Zeiger rs2323* enthält&quot;</p>
<pre><code class="language-cpp">__fastcall Tfthresholds::Tfthresholds(TComponent* Owner)
	: TForm(Owner)
{
     com-&gt;write_rs232(0xaa);
}
</code></pre>
<p>Wie würde das aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/671863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/671863</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Sun, 12 Dec 2004 19:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Sun, 12 Dec 2004 22:21:44 GMT]]></title><description><![CDATA[<p>hermes schrieb:</p>
<blockquote>
<p>Wie würde das aussehen?</p>
</blockquote>
<p>Ungefähr so:</p>
<pre><code class="language-cpp">//header fthresholds.h
class rs232; // Forward-Deklaration
class Tfthresholds: public TForm // nur geraten, aber bei dem Konstruktor sehr wahrscheinlich
{
public:
  __fastcall Tfthresholds(TComponent* Owner, rs232* RS232);
  __property rs232* RS232 = {read=FRS232};
private:
  rs232* FRS232;
// ...und halt der ganze Rest
};
</code></pre>
<pre><code class="language-cpp">//Implementierung fthresholds.cpp
__fastcall Tfthresholds::Tfthresholds(TComponent* Owner, rs232* RS232)
	: TForm(Owner)
{
  // Vielleicht noch Überprüfen auf NULL-Pointer oder sonstiges
  FRS232 = RS232;
  RS232-&gt;write_rs232(0xaa); // Weitere Zugriffe über die Eigenschaft RS232
}
</code></pre>
<p>Sollte der Konstruktor die einzige Stelle sein, an der ein Zugriff auf die rs232-Instanz erfolgt, kannst Du Dir die member-<br />
Variable und die Eigenschaft natürlich sparen, aber dann würde ich auch keinerlei Sinn darin erkennen können.<br />
Wichtig ist hier natürlich, das Formular (sofern ich mit meiner Vermutung richtig liege) nicht automatisch erstellen zu lassen,<br />
sonder im Code per new bzw. delete zu erzeugen bzw. freizugeben, da sonst automatisch ein virtueller Standard-Konstruktor ohne<br />
das neue rs232*-Argument bei der Instanziierung aufgerufen wird (und die member-Variable damit nicht initialisiert wäre).</p>
<p>Den Code habe ich nicht getestet. Falls Du irgendwas daran nicht verstehst, dann frag halt nochmal nach.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/671957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/671957</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Sun, 12 Dec 2004 22:21:44 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Mon, 13 Dec 2004 13:55:10 GMT]]></title><description><![CDATA[<p>Hallo Alexander,<br />
danke für das Beispiel.</p>
<p>class rs232; // Forward-Deklaration<br />
Ist das das gleiche wie extern?</p>
<pre><code class="language-cpp">class rs232; // Forward-Deklaration
class Tfthresholds: public TForm 
{
public:
  __fastcall Tfthresholds(TComponent* Owner, rs232* RS232);
  __property rs232* RS232 = {read=FRS232};
private:
  rs232* FRS232;
// ...und halt der ganze Rest
};
</code></pre>
<p>Der Konstruktor übergibt einen Zeiger rs232* RS232, damit der Zeiger bekannt ist die Forward-Deklaration (könnte man nicht auch den Header der Klasse rs232<br />
includieren?)</p>
<p>Nun erzeugst du eine Eigenschaft<br />
__property rs232* RS232 = {read=FRS232};</p>
<pre><code class="language-cpp">//Implementierung fthresholds.cpp
__fastcall Tfthresholds::Tfthresholds(TComponent* Owner, rs232* RS232)
    : TForm(Owner)
{
  // Vielleicht noch Überprüfen auf NULL-Pointer oder sonstiges
  FRS232 = RS232;
  RS232-&gt;write_rs232(0xaa); // Weitere Zugriffe über die Eigenschaft RS232
}
</code></pre>
<p>Und initialisierst die Eigenschaft mit dem im Konstruktor übergebenen Zeiger.<br />
FRS232 = RS232;</p>
<p>Nun kann ich über die Eigenschaft RS232 auf alle Variablen, sowie Methoden der Klasse rs232 zugreifen.</p>
<p>Ich kann dann aber immer noch nicht auf das Object com der Klasse rs232<br />
das in einer anderen Klasse (fmain_window)instanziert wurde zugreifen oder?<br />
Klasse fthresholds:<br />
com-&gt;write_rs232(0xaa);</p>
<p>In der Klasse fmain_window wird die instanz com der Klasse rs232 erzeugt.<br />
Klasse fmain_window:<br />
com = new rs232;<br />
com-&gt;baudrate = 56000;<br />
com-&gt;comport = &quot;com1&quot;;<br />
com-&gt;timeout = com_timeout;</p>
<p>Oder verstehe ich da irgendetwas falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/672255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/672255</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Mon, 13 Dec 2004 13:55:10 GMT</pubDate></item><item><title><![CDATA[Reply to Auf einem Object in einem anderem Modul zugreifen on Mon, 13 Dec 2004 14:20:59 GMT]]></title><description><![CDATA[<p>hermes schrieb:</p>
<blockquote>
<p>class rs232; // Forward-Deklaration<br />
Ist das das gleiche wie extern?</p>
</blockquote>
<p>Nein. Das ist nur dafür da, um ein include auf den Header von rs232 zu vermeiden. Du könntest auch den header per include<br />
hinzufügen, wenn Du das aber konsequent machst, bekommst Du irgendwann eine Riesenhierarchie von includes und damit lange Kompilier-<br />
zeiten.<br />
Außerdem kannst Du mit einer Forward-Deklaration gegenseitige includes auflösen.</p>
<p>hermes schrieb:</p>
<blockquote>
<p>Der Konstruktor übergibt einen Zeiger rs232* RS232, damit der Zeiger bekannt ist die Forward-Deklaration (könnte man nicht auch den Header der Klasse rs232<br />
includieren?)</p>
</blockquote>
<p>Ja und s.o.</p>
<p>hermes schrieb:</p>
<blockquote>
<p>Ich kann dann aber immer noch nicht auf das Object com der Klasse rs232<br />
das in einer anderen Klasse (fmain_window)instanziert wurde zugreifen oder?</p>
</blockquote>
<p>Na klar. Du musst ja nur genau diese Instanz im Konstruktor übergeben:</p>
<pre><code class="language-cpp">// z.B. von fmain_window aus:
  fthresholds = Tfthresholds(Application, com);
</code></pre>
<p>Ich hoffe, Du hast das jetzt verstanden. Auf jeden Fall kann es nicht schaden, Dir vielleicht mal ein paar Grundlagen zur<br />
Objektorientierung und zu Zeigern anzuschauen.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/672287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/672287</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Mon, 13 Dec 2004 14:20:59 GMT</pubDate></item></channel></rss>