<?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[Muss man extern verwenden?]]></title><description><![CDATA[<p>Ich habe eine TForm mit ein paar Frame-Klassen.</p>
<p>In der TForm lade ich Dateien und lege Daten von diesen in Variablen ab und möchte diese Variablen auch in den TFrame Quelltexten verwenden.</p>
<p>Normal lege ich in der Unit1.cpp eine Variable <strong>int XYZ</strong> an und in der Frame.cpp sage ich dann include die Unit1.h und <strong>extern int XYZ</strong>.<br />
So klappts auf jedenfall.</p>
<p>Jetzt dachte ich, ach haust doch die Variablen direkt in die Unit1 Header, dann benötigst kein extern mehr, aber nun erhalte ich schon über 10.000 Warnungen vom Compiler und er rattert immernoch, das <em>&quot;Public symbol 'XYZ' defined in both module .....&quot;</em></p>
<p>Muss man die extern-Schiene fahren oder habe ich einen Fehler gemacht?<br />
Globale Konstanten muss ich jedenfalls im Header deklarieren, warum gehen Variablen dann nicht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206452/muss-man-extern-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 01:26:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206452.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Feb 2008 12:49:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 12:49:40 GMT]]></title><description><![CDATA[<p>Ich habe eine TForm mit ein paar Frame-Klassen.</p>
<p>In der TForm lade ich Dateien und lege Daten von diesen in Variablen ab und möchte diese Variablen auch in den TFrame Quelltexten verwenden.</p>
<p>Normal lege ich in der Unit1.cpp eine Variable <strong>int XYZ</strong> an und in der Frame.cpp sage ich dann include die Unit1.h und <strong>extern int XYZ</strong>.<br />
So klappts auf jedenfall.</p>
<p>Jetzt dachte ich, ach haust doch die Variablen direkt in die Unit1 Header, dann benötigst kein extern mehr, aber nun erhalte ich schon über 10.000 Warnungen vom Compiler und er rattert immernoch, das <em>&quot;Public symbol 'XYZ' defined in both module .....&quot;</em></p>
<p>Muss man die extern-Schiene fahren oder habe ich einen Fehler gemacht?<br />
Globale Konstanten muss ich jedenfalls im Header deklarieren, warum gehen Variablen dann nicht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462424</guid><dc:creator><![CDATA[Berdi]]></dc:creator><pubDate>Mon, 25 Feb 2008 12:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 12:54:27 GMT]]></title><description><![CDATA[<p>Du musst extern nicht verwenden. Mach doch deine Variablen zu Memberveriable deiner Form. Siehe dazu auch in der FAQ<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39242.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39242.html</a><br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39302.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39302.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462428</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 25 Feb 2008 12:54:27 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 13:10:48 GMT]]></title><description><![CDATA[<p>Danke, aber keine der Beiträge hilft mir leider weiter.</p>
<p>junix sein Beitrag versteh ich leider nur ansatzweise, bissle verständliche Quelltextbeispiele wären da sicherlich nicht deplaziert.</p>
<p>WebFritzi sein Beitrag ist für mein Problem auch nicht sinnvoll, ich arbeite ja mit den Variablen in den einzelnen Frames, verändert dort diese.</p>
<p>Also bleibts wohl bei globalen Variablen mit extern. (mist alles zurückmodeln)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462445</guid><dc:creator><![CDATA[Berdi]]></dc:creator><pubDate>Mon, 25 Feb 2008 13:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 13:15:04 GMT]]></title><description><![CDATA[<p>Erklär mir mal warum du deine Variablen nicht zu Membervariablen deiner Frames oder Forms machen kannst.<br />
Globale Variablen sollte man grundsätzlich vermeiden. Wenn ich in einen meiner Programme wirklich welche brauche, packe ich die alle zusammen in eine Klasse und mache aus der dann ein Singleton. So kann ich den Zugriff wenigstens einigermaßen kontrollieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462449</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 25 Feb 2008 13:15:04 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 13:31:27 GMT]]></title><description><![CDATA[<p>Ich habe eine Hauptform und zusätzlich um die 30 Frames.<br />
Globale Variablen mit denen ich in den einzelnen Frames Arbeite sind ca 40 (nicht alle in jedem Frame, immer nur ein Teil davon) und dort verändere ich natürlich auch deren Inhalt.</p>
<p>So mach ichs momentan</p>
<pre><code class="language-cpp">TForm1 *Form1;

int X = 5;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Caption = IntToStr(X);
}
//---------------------------------------------------------------------------
</code></pre>
<pre><code class="language-cpp">TForm2 *Form2;

extern int X;

//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
 Caption = IntToStr(X);
 X = 6; // Form1-&gt;Caption würde nun 6 nach Form1-&gt;Button1Click() zeigen
}
//---------------------------------------------------------------------------
</code></pre>
<p>Ich würde nun gern auf X in TForm2 zugreifen wollen ohne dies extern erst bekannt machen zu müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462466</guid><dc:creator><![CDATA[Berdi]]></dc:creator><pubDate>Mon, 25 Feb 2008 13:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 13:43:56 GMT]]></title><description><![CDATA[<p>Wenn globale Variable wirklich(!) Notwendig sind, dann solltest du diese trotzdem &quot;zentral&quot; verwalten. Lege einfach 2 Dateien an, &quot;globals.cpp&quot; und &quot;globals.h&quot; ...<br />
In der globals.h musst du auch das Schlüsselwort &quot;extern&quot; verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462477</guid><dc:creator><![CDATA[thomas69]]></dc:creator><pubDate>Mon, 25 Feb 2008 13:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 13:54:14 GMT]]></title><description><![CDATA[<p>Inwiefern ist das jetzt hilfreich? Was meinst du genau mit &quot;zentral verwalten&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462485</guid><dc:creator><![CDATA[Berdi]]></dc:creator><pubDate>Mon, 25 Feb 2008 13:54:14 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 14:03:36 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Wie er es gesagt hat :</p>
<blockquote>
<p>Lege einfach 2 Dateien an, &quot;globals.cpp&quot; und &quot;globals.h&quot; ...<br />
In der globals.h musst du auch das Schlüsselwort &quot;extern&quot; verwenden.</p>
</blockquote>
<p>Builder-spezifisch heißt das eine neue Unit anlegen (enthält .cpp und .h) und im Header alle globalen Variablen deklarieren (mit extern) und in der cpp alle Variablen implementieren (ohne extern)</p>
<p>Aber auch ich rate dir von globalen Variablen ab, Membervariablen sind sicher besser geeignet. Überdenk dein Konzept.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462491</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 25 Feb 2008 14:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 14:40:21 GMT]]></title><description><![CDATA[<p>Dank an akari, für die Erklärung.</p>
<p>Aufgrund des Beispiels (Berdi) hatte ich angenommen, dass du &quot;hier und da&quot; mal eine Variable für die globale Verwendung deklarierst. Man geht bei solch einem Stiel kaputt: Wurde denn eine Variable X schon in Unit xyz angelegt? Welche von beiden verwendet die Unit abc ....</p>
<p>Ich setze auch auf Membervariablen (und hasse diese Bezeichnung;)), aber in der Realität und in übernommenen Projekten kommt es öfter mal vor, dass es globale Variablen gibt. Sie sind aus der Programmierung nicht wirklich wegzudenken – andere Diskussion.<br />
TForm1 * Form1; // == globale Variable <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>Wenn man also wenigstens eine eigene Unit für die globalen Variablen verwendet, sinkt die Fehleranfälligkeit erheblich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462528</guid><dc:creator><![CDATA[thomas69]]></dc:creator><pubDate>Mon, 25 Feb 2008 14:40:21 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 15:04:55 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>thomas69 schrieb:</p>
<blockquote>
<p>Ich setze auch auf Membervariablen (und hasse diese Bezeichnung;)), aber in der Realität und in übernommenen Projekten kommt es öfter mal vor, dass es globale Variablen gibt. Sie sind aus der Programmierung nicht wirklich wegzudenken – andere Diskussion.</p>
</blockquote>
<p>Meistens fasse ich solche globalen Werte/Objekte aber in einem Singleton zusammen.</p>
<blockquote>
<p>TForm1 * Form1; // == globale Variable <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>
</blockquote>
<p>Das ist aber grad ein schlechtes Beispiel. Ich schalte in meinen Builder-Projekten immer alle automatischen Formgenerierungen aus (ausser das Main-Form) und benutze auch diese Pointer nicht. Alle anderen Dialoge werden dynamisch angelegt.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462543</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 25 Feb 2008 15:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 15:16:31 GMT]]></title><description><![CDATA[<p>Sind ja an die 40 globale Variablen, der Weg über die seperate Unit macht sich gut. Danke!</p>
<p>Mit Membervariablen meinst <em>Klassenvariablen</em>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462560</guid><dc:creator><![CDATA[Berdi]]></dc:creator><pubDate>Mon, 25 Feb 2008 15:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 15:22:42 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Berdi schrieb:</p>
<blockquote>
<p>Mit Membervariablen meinst <em>Klassenvariablen</em>?</p>
</blockquote>
<p>Genau</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462568</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 25 Feb 2008 15:22:42 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man extern verwenden? on Mon, 25 Feb 2008 15:27:11 GMT]]></title><description><![CDATA[<p>Ja schon verständlich, da man dann auf die Variable der Klasse zugreift und Überschneidungen nicht passieren können. Allerdings müsste man dann jetzt mehrere tausend mal &quot;glo.&quot; (glo = class) davorschreiben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462572</guid><dc:creator><![CDATA[Berdi]]></dc:creator><pubDate>Mon, 25 Feb 2008 15:27:11 GMT</pubDate></item></channel></rss>