<?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[Objekt von TForm1 nicht bekannt in TForm2]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse rs232 und erstelle ein Objekt com1 in der Klasse TForm1.</p>
<pre><code class="language-cpp">rs232 *com1 = new rs232;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//----------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     com1-&gt;baudrate = 2400;
     com1-&gt;comport  = &quot;com1&quot;;
     com1-&gt;timeout  = 1000;
     if(!(com1-&gt;init_rs232()))
     {
          Application-&gt;MessageBox(&quot;RS232 Port is already used&quot;,&quot; &quot;,MB_OK | MB_ICONERROR);
          Application-&gt;Terminate();
     }

}
//-----------------------------------------------------------------------------
Nun habe ich ein weiteres Formular Form2 und erstelle es
void __fastcall TForm1::Baudrate1Click(TObject *Sender)
{
     Application-&gt;CreateForm(__classid(TForm2), &amp;Form2);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
In der der Klasse TForm2 ist nun aber mein Objekt com1 aus TForm1 nicht bekannt
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
     Form1-&gt;com1-&gt;close_comport();
}
Fehler &quot;com1 ist kein Element von TForm1&quot;
</code></pre>
<p>Da ich in TForm2 den header von TForm1 include, müsste es doch eine Möglichkeit<br />
geben das Objekt com1 &quot;rs232 *com1 = new rs232&quot; im header von TForm1 zu initialisieren, im header von TForm1 habe ich ebenfalls den header der Klasse rs232 includet, funktioniert aber nicht mit der Fehlermeldung:<br />
&quot;KlassenElement kann hier nicht initialisiert werden&quot;&quot;.<br />
Wie kann ich soetwas machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83179/objekt-von-tform1-nicht-bekannt-in-tform2</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 21:16:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83179.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Aug 2004 13:17:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt von TForm1 nicht bekannt in TForm2 on Wed, 18 Aug 2004 13:38:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse rs232 und erstelle ein Objekt com1 in der Klasse TForm1.</p>
<pre><code class="language-cpp">rs232 *com1 = new rs232;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//----------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     com1-&gt;baudrate = 2400;
     com1-&gt;comport  = &quot;com1&quot;;
     com1-&gt;timeout  = 1000;
     if(!(com1-&gt;init_rs232()))
     {
          Application-&gt;MessageBox(&quot;RS232 Port is already used&quot;,&quot; &quot;,MB_OK | MB_ICONERROR);
          Application-&gt;Terminate();
     }

}
//-----------------------------------------------------------------------------
Nun habe ich ein weiteres Formular Form2 und erstelle es
void __fastcall TForm1::Baudrate1Click(TObject *Sender)
{
     Application-&gt;CreateForm(__classid(TForm2), &amp;Form2);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
In der der Klasse TForm2 ist nun aber mein Objekt com1 aus TForm1 nicht bekannt
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
     Form1-&gt;com1-&gt;close_comport();
}
Fehler &quot;com1 ist kein Element von TForm1&quot;
</code></pre>
<p>Da ich in TForm2 den header von TForm1 include, müsste es doch eine Möglichkeit<br />
geben das Objekt com1 &quot;rs232 *com1 = new rs232&quot; im header von TForm1 zu initialisieren, im header von TForm1 habe ich ebenfalls den header der Klasse rs232 includet, funktioniert aber nicht mit der Fehlermeldung:<br />
&quot;KlassenElement kann hier nicht initialisiert werden&quot;&quot;.<br />
Wie kann ich soetwas machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585413</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Wed, 18 Aug 2004 13:38:04 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt von TForm1 nicht bekannt in TForm2 on Wed, 18 Aug 2004 17:01:15 GMT]]></title><description><![CDATA[<p>Öhm, natürlich ist com1 kein Element von Form1, weil du es nicht in Form1 angelegt hast, sondern global. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Wenn du ein Objekt, das zum Formular gehören soll, anlegen willst, musst du das in der Header machen und nicht einfach in der CPP-Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585662</guid><dc:creator><![CDATA[Hoffmann_Till]]></dc:creator><pubDate>Wed, 18 Aug 2004 17:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt von TForm1 nicht bekannt in TForm2 on Wed, 18 Aug 2004 17:41:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für deine Antwort.</p>
<p>Hoffmann_Till schrieb:</p>
<blockquote>
<p>Wenn du ein Objekt, das zum Formular gehören soll, anlegen willst, musst du das in der Header machen und nicht einfach in der CPP-Datei.</p>
</blockquote>
<p>Das habe ich schon erfolglos versucht.</p>
<p>Wenn ich com1 im header von TForm1 initialisiere &quot;rs232 *com1 = new rs232&quot; kommt die Fehlermeldung:<br />
KlassenElement kann hier nicht initialisiert werden.</p>
<p>Den Header der Klasse rs232 habe ich natürlich in den header von TForm1<br />
included.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585716</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Wed, 18 Aug 2004 17:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt von TForm1 nicht bekannt in TForm2 on Wed, 18 Aug 2004 19:43:58 GMT]]></title><description><![CDATA[<p>Hi Hermes:</p>
<p>Im Header Form1 DEKLARIERST Du eine Member- Variable *Com1</p>
<p>Im Construktor / OnCreate erzeugst Du eine Instanz mit new</p>
<p>Im Destructor / OnClose deletest Du das Teil!</p>
<p>WICHTIG: Die Variable muss ein Member von Form 1 sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585818</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Wed, 18 Aug 2004 19:43:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt von TForm1 nicht bekannt in TForm2 on Wed, 18 Aug 2004 20:14:31 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>meinst du das so:</p>
<pre><code class="language-cpp">#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
#include &lt;Forms.hpp&gt;
#include &quot;rs232.h&quot;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// Von der IDE verwaltete Komponenten
	TButton *Button1;
	void __fastcall Button1Click(TObject *Sender);
private:	// Anwender-Deklarationen
public:		// Anwender-Deklarationen
	__fastcall TForm1(TComponent* Owner);
     rs232* com1;
};
Konstruktor
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	rs232* com1 = new rs232;
}

TForm2
void __fastcall TForm2::FormCreate(TObject *Sender)
{
     Form1-&gt;com1-&gt;baudrate = 19200;
     Form1-&gt;com1-&gt;comport  = &quot;com2&quot;;
     Form1-&gt;com1-&gt;timeout  = 1000;
     if(!(Form1-&gt;com1-&gt;init_rs232()))
     {
          Application-&gt;MessageBox(&quot;RS232 Port is already used&quot;,&quot; &quot;,MB_OK | MB_ICONERROR);
          Application-&gt;Terminate();
     }
}
</code></pre>
<p>Läuft nicht mit der Fehlermeldung:<br />
com1 ist kein Element von TForm1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585841</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Wed, 18 Aug 2004 20:14:31 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt von TForm1 nicht bekannt in TForm2 on Wed, 18 Aug 2004 20:31:29 GMT]]></title><description><![CDATA[<p>Hermes schrieb:</p>
<blockquote>
<pre><code class="language-cpp">__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    rs232* com1 = new rs232;
}
</code></pre>
</blockquote>
<p>Muss so ausssehen:</p>
<pre><code class="language-cpp">__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    com1 = new rs232;
}
</code></pre>
<p>Kennst du dich mit Klassen, Pointern usw. aus???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585849</guid><dc:creator><![CDATA[Hoffmann_Till]]></dc:creator><pubDate>Wed, 18 Aug 2004 20:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt von TForm1 nicht bekannt in TForm2 on Wed, 18 Aug 2004 23:08:14 GMT]]></title><description><![CDATA[<p>Alles klar, ich habe im Header von TForm1 ja schon den pointer rs232* com1 declariert.</p>
<p>Habe eigentlich keine Probleme mit Pointer wie z.B. char* int* const char*<br />
char a; char* pt = &amp;a;<br />
der Pointertyp rs232* hat mich ein bischen verwirrt.</p>
<p>Mit rs232* com1 = new rs232 declariere ich im Konstruktor natürlich einen Pointer der nichts<br />
mit der public Membervariable rs232* com1 inTForm1 zu tun hat, sprich das Objekt hat nur im Konstruktor seine gültigkeit.</p>
<p>Mit dem Ausdruck com1 = new com1 wird der Pointer TForm1-&gt;com1 initialisiert, der für<br />
das Objekt com1 als Zeiger auf alle seine Eigenschaften/Variabeln zeigt.</p>
<p>Dieser Zeiger wird z.B. beim aufruf der MemberFunktion der Klasse rs232 com1-&gt;init_rs232() mit übergeben (this)<br />
in der dann die Eigenschaften/Variabeln des Objekts com1 als Kriterium benutzt werden.</p>
<p>Intialisiere ich ein weiteres Objekt der Klasse rs232 z.B. com2 wird wiederum<br />
ein Zeiger auf den Speicherbereich der Eigenschaften/Variabeln erstellt.</p>
<p>Es ist wichtig mit delete Objekte zu löschen wenn sie nicht mehr benötigt werden, da sonst der Speicherbereich nicht freigegeben wird.</p>
<p>Falls ich da irgendetwas missverstanden habe korrigiert mich bitte.</p>
<p>Noch eine Frage:<br />
__published:<br />
TEdit <em>Edit1;<br />
public:<br />
rs232</em> com1;</p>
<p>Wo liegt hier der Unterschied bei den declarierten Objektzeigern?</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/585863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/585863</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Wed, 18 Aug 2004 23:08:14 GMT</pubDate></item></channel></rss>