<?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 Label von Form1 mit eigener Klasse zugreifen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich will mit meiner eigenen Klasse &quot;Board&quot; unter anderem die Eigenschaft Caption von meinem Label &quot;VerbindungsStatus&quot; ändern. Dieses Label gehört zu dem Objekt Form1. Hier der Quelltext:</p>
<pre><code class="language-cpp">class TForm1 : public TForm
{
__published:	// Von der IDE verwaltete Komponenten
        TButton *Button1;
        TLabel *VerbindungsStatus;
        void __fastcall Button1Click(TObject *Sender);
private:	// Anwender-Deklarationen
public:		// Anwender-Deklarationen
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
class Board {
        private:
                //Variablen
                int addr;
        public:
                //Methoden
                Board(); //Konstruktor
                void connect(); //Verbindung zum Board herstellen
};
//---------------------------------------------------------------------------
Board::Board() {

}
//---------------------------------------------------------------------------
void Board::connect() {
        Form1-&gt;VerbindungsStatus-&gt;Caption = &quot;Verbindung wird hergestellt...&quot;;
        if(Form1-&gt;OpenDevice(0) == 0)
        {
                this-&gt;addr = 0;
                Form1-&gt;VerbindungsStatus-&gt;Caption = &quot;Verbunden! Addr: &quot; + IntToStr(this-&gt;addr);

        }
        else Form1-&gt;VerbindungsStatus-&gt;Caption = &quot;Verbindung konnte nicht herrgestellt werden&quot;;
}
</code></pre>
<p>Mein Problem, ich kriege immer folgende Fehlermeldung:</p>
<pre><code>E2451 Undefiniertes Symbol 'Form1'
</code></pre>
<p>Dabei wird auf die erste Zeile in der Methode Board::connect() verwiesen (&quot;Form1-&gt;VerbindungsStatus-&gt;Caption...&quot;).</p>
<p>Ich kann mir echt nicht erkären warum es zu dieser Fehlermeldung kommt. Ich habe schon in meinem Buch (C++ für Kids) nachgesehen und die Suchfunktion benutzt. <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>Wäre toll wenn ihr mir helfen könntet...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192842/auf-label-von-form1-mit-eigener-klasse-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 22:23:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192842.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Sep 2007 11:21:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auf Label von Form1 mit eigener Klasse zugreifen on Wed, 19 Sep 2007 11:21:32 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich will mit meiner eigenen Klasse &quot;Board&quot; unter anderem die Eigenschaft Caption von meinem Label &quot;VerbindungsStatus&quot; ändern. Dieses Label gehört zu dem Objekt Form1. Hier der Quelltext:</p>
<pre><code class="language-cpp">class TForm1 : public TForm
{
__published:	// Von der IDE verwaltete Komponenten
        TButton *Button1;
        TLabel *VerbindungsStatus;
        void __fastcall Button1Click(TObject *Sender);
private:	// Anwender-Deklarationen
public:		// Anwender-Deklarationen
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
class Board {
        private:
                //Variablen
                int addr;
        public:
                //Methoden
                Board(); //Konstruktor
                void connect(); //Verbindung zum Board herstellen
};
//---------------------------------------------------------------------------
Board::Board() {

}
//---------------------------------------------------------------------------
void Board::connect() {
        Form1-&gt;VerbindungsStatus-&gt;Caption = &quot;Verbindung wird hergestellt...&quot;;
        if(Form1-&gt;OpenDevice(0) == 0)
        {
                this-&gt;addr = 0;
                Form1-&gt;VerbindungsStatus-&gt;Caption = &quot;Verbunden! Addr: &quot; + IntToStr(this-&gt;addr);

        }
        else Form1-&gt;VerbindungsStatus-&gt;Caption = &quot;Verbindung konnte nicht herrgestellt werden&quot;;
}
</code></pre>
<p>Mein Problem, ich kriege immer folgende Fehlermeldung:</p>
<pre><code>E2451 Undefiniertes Symbol 'Form1'
</code></pre>
<p>Dabei wird auf die erste Zeile in der Methode Board::connect() verwiesen (&quot;Form1-&gt;VerbindungsStatus-&gt;Caption...&quot;).</p>
<p>Ich kann mir echt nicht erkären warum es zu dieser Fehlermeldung kommt. Ich habe schon in meinem Buch (C++ für Kids) nachgesehen und die Suchfunktion benutzt. <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>Wäre toll wenn ihr mir helfen könntet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368381</guid><dc:creator><![CDATA[Axellent]]></dc:creator><pubDate>Wed, 19 Sep 2007 11:21:32 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Label von Form1 mit eigener Klasse zugreifen on Wed, 19 Sep 2007 12:17:47 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Hast du Form und Board in zwei verschiedene Klassen aufgeteilt? Wenn ja dann fehlt vermutlich ein include.</p>
<p>Aber es ist eh besser wenn du nicht den den globalen Pointer des Forms benutzt sondern der Klasse Board einen eigenen Pointer auf das Form mitgibst, am besten über den Konstruktor.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368426</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 19 Sep 2007 12:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Label von Form1 mit eigener Klasse zugreifen on Wed, 19 Sep 2007 12:37:25 GMT]]></title><description><![CDATA[<p>Beide Klassenvereinbarungen stehen in der üblichen &quot;Unit1.h&quot;.</p>
<p>Wie sähe so ein Pointer auf das Form in dem Konstruktor von &quot;Board&quot; aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368460</guid><dc:creator><![CDATA[Axellent]]></dc:creator><pubDate>Wed, 19 Sep 2007 12:37:25 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Label von Form1 mit eigener Klasse zugreifen on Wed, 19 Sep 2007 12:42:08 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Definition der Klasse</p>
<pre><code class="language-cpp">class Board {
        private:
                //Variablen
                int addr;
                TForm* m_Form;
        public:
                //Methoden
                Board(TForm1* Form); //Konstruktor
                void connect(); //Verbindung zum Board herstellen
};
</code></pre>
<p>Implementation der Klasse</p>
<pre><code class="language-cpp">Board::Board(TForm1* Form) : m_Form(Form)
{
}

void Board::connect() {
        m_Form-&gt;...
}
</code></pre>
<p>Verwendung der Klasse aus dem Form heraus :</p>
<pre><code class="language-cpp">... new Board(this);
</code></pre>
<p>Dabei ist zu beachten das bei der Definition von Board bereits TForm1 bekannt sein muß. Da wäre es angebracht Board in eine eigene Unit auszulagen und richtig zu includen. Eventuell auch Forward Declaration verwenden.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368467</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 19 Sep 2007 12:42:08 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Label von Form1 mit eigener Klasse zugreifen on Wed, 19 Sep 2007 13:19:21 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Hilfe! <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Leider ernte ich immer noch Fehlermeldungen, und zwar:</p>
<pre><code>[C++ Fehler] Board.h(21): E2316 'VerbindungsStatus' ist kein Element von 'TForm'
[C++ Fehler] Board.h(22): E2316 'OpenDevice' ist kein Element von 'TForm'
etc...
</code></pre>
<p>So sieht meine <strong>Unit1.cpp</strong> im Moment aus:</p>
<pre><code class="language-cpp">[...]
#include &quot;Unit1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        MeinBoard = new Board(this);
}
</code></pre>
<p>Meine <strong>Unit1.h</strong> so:</p>
<pre><code class="language-cpp">[...]
class TForm1 : public TForm
{
__published:	// Von der IDE verwaltete Komponenten
        TButton *Button1;
        TLabel *VerbindungsStatus;
        void __fastcall Button1Click(TObject *Sender);
private:	// Anwender-Deklarationen
public:		// Anwender-Deklarationen
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#include &quot;Board.h&quot;  //&quot;Includierung&quot; der Klasse Board
#endif
</code></pre>
<p>und meine <strong>Board.h</strong> so:</p>
<pre><code class="language-cpp">class Board {
        private:
                //Variablen
                TForm* m_Form;
                int addr; //speichert die Adresse des Boards (0 bis 3)
        public:
                //Methoden
                Board(TForm1* Form); //Konstruktor
                void connect(); //Verbindung zum Board herstellen
};
//---------------------------------------------------------------------------
Board::Board(TForm1* Form) : m_Form(Form)  {
}
//---------------------------------------------------------------------------
void Board::connect() {
        m_Form-&gt;VerbindungsStatus-&gt;Caption = &quot;Verbindung wird hergestellt...&quot;;
        if(m_Form-&gt;OpenDevice(0) == 0) {

        [...]
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1368507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368507</guid><dc:creator><![CDATA[Axellent]]></dc:creator><pubDate>Wed, 19 Sep 2007 13:19:21 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Label von Form1 mit eigener Klasse zugreifen on Wed, 19 Sep 2007 13:29:32 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Sorry im Board.h müßen natürlich alle TForm durch TForm1 ersetzt werden.<br />
Um jetzt nicht mit den Includes einen Kreis zu bilden siehe Forward Declaration, z.B. <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-172939-and-highlight-is-forward+declaration.html" rel="nofollow">hier</a> und Include Guards.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368521</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 19 Sep 2007 13:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Label von Form1 mit eigener Klasse zugreifen on Wed, 19 Sep 2007 14:09:20 GMT]]></title><description><![CDATA[<p>Vielen Dank!</p>
<p>Ich habe jetzt folgendes gemacht:</p>
<p>1.) In der Datei Board.h alle &quot;TForm&quot;s durch &quot;TForm1&quot;se ersetzt.<br />
2.) Die Include Anweisung für die Datei Board.h in die Unit1.cpp verschoben, wie <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-176901-and-highlight-is-forward+declaration.html" rel="nofollow">hier</a> hier beschrieben.</p>
<p>Jetzt scheint der Compiler das Label &quot;VerbindungsStatus&quot; zu kennen. Es werden nur noch 2 Fehlermeldungen angezeigt:</p>
<pre><code>[C++ Fehler] Board.h(24): E2316 'OpenDevice' ist kein Element von 'TForm1'
[C++ Fehler] Unit1.cpp(20): E2451 Undefiniertes Symbol 'MeinBoard'
</code></pre>
<p>Der Befehl &quot;<strong>OpenDevice</strong>&quot; kommt aus einer DLL Datei, deren .lib Datei ich über <em>Projekt-&gt;Dem Projekt hinzufügen</em> hinzugefügt habe. Außerdem habe ich in der Unit1.cpp Datei noch die Header Datei der DLL eingebunden:</p>
<pre><code class="language-cpp">#include &lt;vcl.h&gt;
#pragma hdrstop
#include &quot;Unit1.h&quot;
#include &quot;K8055D.h&quot;  //&lt;-- Die Header Datei der DLL
#include &quot;Board.h&quot;   //&lt;-- Hier wird die Klasse Board includiert
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
[...]
</code></pre>
<p>Dieser Einbindungsprozess müsste korrekt sein, da bevor ich angefangen habe meine Klasse &quot;Board&quot; zu benutzen die Befehle wie &quot;OpenDevice&quot; alle geklappt haben.</p>
<p><strong>MeinBoard</strong> ist der Name den ich der Instanz der Klasse &quot;Board&quot; geben will in der Datei Unit1.cpp geben will:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
        MeinBoard = new Board(this);
}
</code></pre>
<p>Ich habe die Header Datei der DLL schon mal testweise in die Datei Board.h eingesetzt, doch bewirkt hat es nichts...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1368560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1368560</guid><dc:creator><![CDATA[Axellent]]></dc:creator><pubDate>Wed, 19 Sep 2007 14:09:20 GMT</pubDate></item></channel></rss>