<?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[Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens)]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>Eine ganz blöde Frage:</p>
<p>Wie legt man in Visual Studio eigentlich 'richtig' - also so, wie es von den VS Autoren gedacht wurde - globale Variablen an? Ich habe in der GUI nämlich noch keine Möglichkeit dazu gefunden: Im Kontextmenü einer Klasse gibt es zwar &quot;Add Variable&quot;, aber dort gibt es nur die Möglichkeiten <em>public, protected</em> und <em>private</em>.<br />
(OK, eine globale Variable ist ja auch kein Klassenmember, aber eine andere Möglickeit zum Hinzufügen von Variablen per GUI ist mir noch nicht begegnet, es kommt immer nur der &quot;<em>Add Member Variable Wizard</em>&quot;)<br />
**<br />
Bisher setzte ich daher globale Variablen immer von Hand hinter den include Teil, entspricht das so den Regeln der Kunst?**<br />
<em>(Und ist es egal, ob ich sie in den Header .h oder gleich in die .cpp Datei schreibe?)</em></p>
<p>Bisher funktioniert es jedenfalls, bis auf eine ärgerliche Einschränkung:<br />
**<br />
Ich kann im ganzen Projekt jeden Namen einer globalen Variable nur einmal verwenden, sonst gibt es einen Error LNK2005.** <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Z.B.:</p>
<blockquote>
<p>ZahlenhaufenIteration.obj : error LNK2005: &quot;class C3DFenster * tuf&quot; (?tuf@@3PAVC3DFenster@@A) already defined in TuringIteration.obj</p>
</blockquote>
<p><strong>Kann man das irgendwie vermeiden?</strong><br />
Ich habe zwar einiges über LNK2005 gefunden, aber das scheint hier nicht zu passen. (Häufige Empfehlung: gezieltes Entfernen einer Libary....)</p>
<p>Danke und Gruß,<br />
dong</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156496/anfängerfrage-globale-variablen-in-vs-insb-vermeindung-von-lnk2005-bei-mehrfacher-verwendung-eines-namens</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 06:30:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156496.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Aug 2006 08:42:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 08:42:47 GMT]]></title><description><![CDATA[<p>Hallo allerseits!</p>
<p>Eine ganz blöde Frage:</p>
<p>Wie legt man in Visual Studio eigentlich 'richtig' - also so, wie es von den VS Autoren gedacht wurde - globale Variablen an? Ich habe in der GUI nämlich noch keine Möglichkeit dazu gefunden: Im Kontextmenü einer Klasse gibt es zwar &quot;Add Variable&quot;, aber dort gibt es nur die Möglichkeiten <em>public, protected</em> und <em>private</em>.<br />
(OK, eine globale Variable ist ja auch kein Klassenmember, aber eine andere Möglickeit zum Hinzufügen von Variablen per GUI ist mir noch nicht begegnet, es kommt immer nur der &quot;<em>Add Member Variable Wizard</em>&quot;)<br />
**<br />
Bisher setzte ich daher globale Variablen immer von Hand hinter den include Teil, entspricht das so den Regeln der Kunst?**<br />
<em>(Und ist es egal, ob ich sie in den Header .h oder gleich in die .cpp Datei schreibe?)</em></p>
<p>Bisher funktioniert es jedenfalls, bis auf eine ärgerliche Einschränkung:<br />
**<br />
Ich kann im ganzen Projekt jeden Namen einer globalen Variable nur einmal verwenden, sonst gibt es einen Error LNK2005.** <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Z.B.:</p>
<blockquote>
<p>ZahlenhaufenIteration.obj : error LNK2005: &quot;class C3DFenster * tuf&quot; (?tuf@@3PAVC3DFenster@@A) already defined in TuringIteration.obj</p>
</blockquote>
<p><strong>Kann man das irgendwie vermeiden?</strong><br />
Ich habe zwar einiges über LNK2005 gefunden, aber das scheint hier nicht zu passen. (Häufige Empfehlung: gezieltes Entfernen einer Libary....)</p>
<p>Danke und Gruß,<br />
dong</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118946</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Thu, 17 Aug 2006 08:42:47 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 09:04:14 GMT]]></title><description><![CDATA[<p>gibts dafür nicht das schlüßelwort extern?<br />
also zb in der stdafx.h die variable mit</p>
<pre><code>extern CString m_sStringGlobal;
</code></pre>
<p>deklarieren. in der jeweiligen *.cpp (ich machs wenn dann in der stdafx.cpp)</p>
<pre><code>CString m_sStringGlobal;
</code></pre>
<p>wieder auflösen und somit kannst du die in jeder classe in deinem project verwenden.</p>
<blockquote>
<p>Ich kann im ganzen Projekt jeden Namen einer globalen Variable nur einmal verwenden</p>
</blockquote>
<p>naja ist doch klar oder du kannst auch nicht in einer classe ne variablennamen 2 mal verwenden. das gleiche gilt dann auch für global.</p>
<p>mfg<br />
LowFly</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118970</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Thu, 17 Aug 2006 09:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 10:00:17 GMT]]></title><description><![CDATA[<p>Hallo und Danke LowFly, ich glaube, wir beide meinen etwas anderes.</p>
<p>Wenn ich recht verstehe, redest Du von globalen Variablen, die im ganzen Projekt gültig sind. (Ich kenne auch die <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1085566.html" rel="nofollow">entsprechende FAQ Seite</a>, ich benutzte schließlich die Suche und schaute in die FAQ...;) )<br />
Die meine ich nicht, ich meinte etwas weniger global:</p>
<p>Ich meine globale Variablen, die innerhalb einer .cpp Datei (inkl. Header) gültig sind.</p>
<p>So, wie ich das bisher machte, funktionierte das auch:</p>
<p>Man betrachte die Klassen CBeispiel1 und CBeispiel2, bestehnd aus den Dateien Beispiel1.cpp, Beispiel1.h, Beispiel2.cpp und Beispiel2.h.</p>
<p>Die globalen Variablen, die ich meine, kann ich so anlegen:</p>
<pre><code class="language-cpp">//Besipiel1.cpp:
#include &quot;Beispiel1.h&quot;

//&quot;meine&quot; globale Variable:
int test1;
</code></pre>
<p>oder eben auch:</p>
<pre><code class="language-cpp">//Beispiel2.h:
//&quot;meine&quot; globale Variable:
int test2;
...
//Beispiel2.cpp:
#include &quot;Beispiel2.h&quot;
...
</code></pre>
<p>Dann kann ich von allen Funktionen in Beispiel1.cpp auf test1 und in allen Funktionen in Beispiel2.cpp auf test2 zugreifen, aber eben nicht umgekehrt.<br />
Und soweit ist das auch erwünscht.</p>
<p>Nicht erwünscht ist hingegen, dass ich in Beipiel1.cpp und in Beispiel2.cpp nicht den gleichen Namen für diese Art globale Variable verwenden darf, dann kommt eben der blöde LNK2005 Error:</p>
<pre><code class="language-cpp">//Besipiel1.cpp:
#include &quot;Beispiel1.h&quot;

//&quot;meine&quot; globale Variable:
int test;
</code></pre>
<pre><code class="language-cpp">//Besipiel2.cpp:
#include &quot;Beispiel2.h&quot;

//&quot;meine&quot; globale Variable:
int test;
</code></pre>
<p>geht deshalb eben nicht.</p>
<p>Und das ist (eine meiner zwei) Frage(n): Wie kann ich dafür gleiche Namen verwenden (die Variablen haben ja schließlich verschiedene Gültigkeitsbereiche!), aber LNK2005 vermeiden?</p>
<p>Danke und Gruß,<br />
dong</p>
<p>P.S.:<br />
Warum globale Variablen und nicht Membervariablen?<br />
Für mindestens zwei Dinge:</p>
<ol>
<li>Ich verwende Threadfunktionen, von denen man nicht direkt auf alle Membervariablen zugreifen kann, da Threadfunktionen statische Funktionen sein müssen. Daher behelfe ich mir mit dem Trick, dass ich globale Zeiger benutze um auf Membervariablen vom Thread aus zuzugreifen.</li>
<li>Für Nummerierungen mit enum: Das sind zwar nicht direkt globale Variablen, aber für sie gelten die ähnliche Probleme:<br />
z.B.</li>
</ol>
<pre><code class="language-cpp">//Beispiel1.h
enum Randbedingungen
{
	fest, offen, periodisch
};
</code></pre>
<pre><code class="language-cpp">//Beispiel2.h
enum Randbedingungen2
{
	fest, offen, periodisch
};
</code></pre>
<p>führt zu einem ähnlichen Error:</p>
<blockquote>
<p>error C2365: 'fest' : redefinition; previous definition was 'enumerator': see declaration of 'fest'</p>
</blockquote>
<p>Aber zugegeben, die sind wohl doch ein anderes paar Steifel und die könnte ich vielleicht wirklich in LowFlys Sinne global anlegen, mal gucken, ob das klappt... <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119030</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Thu, 17 Aug 2006 10:00:17 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 11:34:29 GMT]]></title><description><![CDATA[<p>schlag mich aber der gültigeits bereich von dem du sprichst bezieht sich glaube ich nur auf classen den alles was in einer classe steht ist ja geschütz.</p>
<p>weil man es ja class.m_variable oder class-&gt;m_variable aufruft. alles was nun auserhalb einer classe liegt steht in einem globalen bereich der durch nichts geschützt wird. somit passiert also genau das gleiche wie wenn du in einer classe ein &amp; dieselbe variable 2 mal definierst.</p>
<p>wenn ich das bisher richtig verstanden hab dann macht der compiler keinen unterschied zwischen A.h, A.cpp &amp; B.h, B.cpp das sind für den nur dateien die er nacheinader einliest &amp; aus 5 verschiedenen dateien 1 große macht.</p>
<p>steht jetzt in A.cpp auserhalb einer classe ne deklaration zb.</p>
<pre><code>CString m_sGlobal;
</code></pre>
<p>kann diese nur in der A.cpp angesprochen werden steht aber im gloabalne bereich der durch nix geschützt ist (classe).<br />
deklarierst du nun in B.cpp die selbe variable nochmal, steht sie für dich scheinbar in einer anderen datei aber für den compiler nicht.</p>
<p>setzt du nun das extern vor die variable</p>
<pre><code>extern CString m_sGlobal;
</code></pre>
<p>sagst du dem compiler nur damit das diese variable für alle anderen dateien die er einliest, die nach der folgen in der du sie deklariert hast, gültig ist und diese benutzt werden darf. (Anbei es spielt keine rolle ob du globale variable in der *.cpp o. *.h auserhalb einer classe deklarierst.)</p>
<p>beide deklarationen mit und ohne extern stehen aber in dem selben globalen bereich der wie eine classe behandelt wird.</p>
<p>aus diesem grund denke ich passiert der fehler.</p>
<p>hoffe es stimmt so wie ich es erklärt hab, wenn nicht bitte berichtigen <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="😉"
    /><br />
mfg<br />
LowFly</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119098</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Thu, 17 Aug 2006 11:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 12:10:31 GMT]]></title><description><![CDATA[<p>LowFly schrieb:</p>
<blockquote>
<p>wenn ich das bisher richtig verstanden hab dann macht der compiler keinen unterschied zwischen A.h, A.cpp &amp; B.h, B.cpp das sind für den nur dateien die er nacheinader einliest &amp; aus 5 verschiedenen dateien 1 große macht.</p>
<p>steht jetzt in A.cpp auserhalb einer classe ne deklaration zb.</p>
<pre><code>CString m_sGlobal;
</code></pre>
<p>kann diese nur in der A.cpp angesprochen werden steht aber im gloabalne bereich der durch nix geschützt ist (classe).<br />
deklarierst du nun in B.cpp die selbe variable nochmal, steht sie für dich scheinbar in einer anderen datei aber für den compiler nicht.</p>
<p>setzt du nun das extern vor die variable</p>
<pre><code>extern CString m_sGlobal;
</code></pre>
</blockquote>
<p>Ah ja, jetzt verstehe ich sowohl besser, was der Compiler macht, als auch besser, was der <em>extern</em> Vorschlag in der stdafx.h sollte.</p>
<p>Nur eins verstehe ich dann noch nicht:</p>
<blockquote>
<p>in der jeweiligen *.cpp (ich machs wenn dann in der stdafx.cpp)</p>
<pre><code>CString m_sStringGlobal;
</code></pre>
<p>wieder auflösen und somit kannst du die in jeder classe in deinem project verwenden.</p>
</blockquote>
<p>Was heißt hier &quot;auflösen&quot;?</p>
<p>Danke und Gruß,<br />
Dong</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119123</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 12:37:43 GMT]]></title><description><![CDATA[<p>auflösen, bekanntmachen wie auch immer.<br />
variable nicht aufgelöst (o. so ähnlich) bringt der compiler als fehlermeldung wenn du irgendwo in deinem project</p>
<pre><code>extern CString m_GlobalString;
</code></pre>
<p>schreibst und die variable m_GlobalString zb in deinem Dialog wie unten folgt verwendest</p>
<pre><code>CDialog::OnInitDialog()
{
    m_GlobalString = &quot;Ich bin eine globale Variable&quot;;
    MessageBox(m_GlobalString);
....
}
</code></pre>
<p>OHNE sie vorher in diesem fall in der Dialog.cpp oberhalb der classe wie folgt aufzulösen.</p>
<pre><code>CSting m_GlobalString;
</code></pre>
<p>ich mach das halt immer in der stdafx.h / .cpp da dies eine der ersten dateien ist die der compiler einliest bzw. diese in jeder datei als erste als include stehn. somit brauch ich mir dann keine gedanken mehr machen hab ich sie nun aufgelöst oder nicht &amp; wenn ja wo. die stdafx sehen alle classen somit gloabal.</p>
<p>mfg<br />
LowFly</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119150</guid><dc:creator><![CDATA[LowFly]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 12:48:54 GMT]]></title><description><![CDATA[<p>Danke, jetzt habe ich es verstanden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119165</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Thu, 17 Aug 2006 12:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Thu, 17 Aug 2006 15:15:04 GMT]]></title><description><![CDATA[<p>LowFly hat das ganz gut erklärt, trotzdem habe ich noch was zu deinem PS.</p>
<p>dong schrieb:</p>
<blockquote>
<p>P.S.:<br />
Warum globale Variablen und nicht Membervariablen?<br />
Für mindestens zwei Dinge:</p>
<ol>
<li>Ich verwende Threadfunktionen, von denen man nicht direkt auf alle Membervariablen zugreifen kann, da Threadfunktionen statische Funktionen sein müssen. Daher behelfe ich mir mit dem Trick, dass ich globale Zeiger benutze um auf Membervariablen vom Thread aus zuzugreifen.</li>
</ol>
</blockquote>
<p>Du kannst einem Thread aber auch einen Zeiger übergeben. Daher muss das Zeugs nicht immer über Globale Variablen gehen. Ich würde sowieso vorschlagen, dies gerade nicht zu tun. Wie kannst du nun mehrere Dinge über nur einen Zeiger übergeben? Kein Problem:</p>
<pre><code class="language-cpp">struct SGiveThread
{
    int nInt;
    float fFloat;
    CString strName;
    CEinObjekt* pEinObjekt;
    // usw. oder was auch immer
};

UINT CDeineKlasse::ThreadFunction(LPVOID pParam)
{
    SGiveThread* pGiveThread = static_cast&lt;SGiveThread*&gt;(pParam);

    // pGiveThread auslesen.

    // Speicher freigeben.
    delete pGiveThread;
}

void CDeineKlasse::StartThread()
{
    SGiveThread* pGiveThread = new SGiveThread;

    // pGiveThread füllen.

    AfxBeginThread(CDeineKlasse::ThreadFunction, pGiveThread);
}
</code></pre>
<p>dong schrieb:</p>
<blockquote>
<ol>
<li>Für Nummerierungen mit enum: Das sind zwar nicht direkt globale Variablen, aber für sie gelten die ähnliche Probleme:<br />
z.B.</li>
</ol>
<pre><code class="language-cpp">//Beispiel1.h
enum Randbedingungen
{
	fest, offen, periodisch
};
</code></pre>
<pre><code class="language-cpp">//Beispiel2.h
enum Randbedingungen2
{
	fest, offen, periodisch
};
</code></pre>
<p>führt zu einem ähnlichen Error:</p>
<blockquote>
<p>error C2365: 'fest' : redefinition; previous definition was 'enumerator': see declaration of 'fest'</p>
</blockquote>
<p>Aber zugegeben, die sind wohl doch ein anderes paar Steifel und die könnte ich vielleicht wirklich in LowFlys Sinne global anlegen, mal gucken, ob das klappt... <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="🙂"
    /></p>
</blockquote>
<p>Jo also, wenn du ein Enum hast mit zweimal dem gleichen Inhalt, da ist es schon sinnvoll, dass du da das gleiche brauchst. Und sonst definier halt einen anderen Namen, wenn es einen anderen Inhalt hat. Oder nimm die Inhalt zusammen und deklarier es nur einmal. Also das Problem wirst du wohl mit einer sinnvollen Strukturierung wegbekommen.</p>
<p>Ajo ... nochwas. Wenn du mehrere Sachen Global anlegst, ist es vielleicht eine Überlegung wert, dass du sie in ein Namespace nimmst.</p>
<pre><code class="language-cpp">// stdafx.h
namespace Global
{
    // Irgendwelche Variablen.
}
</code></pre>
<p>Aber sowas sollte glaub ich schon in der FAQ stehen ^^</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119299</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 17 Aug 2006 15:15:04 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Mon, 21 Aug 2006 08:11:11 GMT]]></title><description><![CDATA[<p>*mich doch nochmal meld*<br />
Danke für Deine Ergänzungen, Dravere, insbesondere die Verpackung meherer Werte in einem Zeiger könnte mir noch nützlich sein. <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="🙂"
    /><br />
Allerdings:</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>dong schrieb:</p>
<blockquote>
<p>Ich verwende Threadfunktionen, von denen man nicht direkt auf alle Membervariablen zugreifen kann, da Threadfunktionen statische Funktionen sein müssen. Daher behelfe ich mir mit dem Trick, dass ich globale Zeiger benutze um auf Membervariablen vom Thread aus zuzugreifen.</p>
</blockquote>
<p>Du kannst einem Thread aber auch einen Zeiger übergeben. Daher muss das Zeugs nicht immer über Globale Variablen gehen. Ich würde sowieso vorschlagen, dies gerade nicht zu tun.</p>
</blockquote>
<p>Also:<br />
Wenn ich dem Thread jede Variable, auf die er zugreifen muss, einzeln in einem <em>struct</em> verpackt übergebe, wäre das schon eine ganz schön lange Liste, zumal sich diese Variablen während Ablauf des Threads ändern können, d.h. ich müßte für jede Varaible erst mal einen Zeiger erstellen, damit der Thread Zugriff auf den aktuellen Wert hat.Dann würde ich am besten ja gleich nur Zeiger auf die verwendeten Objekte übergeben <em>(statt auf deren Member)</em>. Und dann ist es ja eigentlich nur ein kleiner Unterschied zu meinen globalen <em>(im Sinne von: Geltungsbereich = dateiweit)</em> Zeigern auf eben diese Objekte.<br />
Also der einzige Nachteil, den ich bei meinen gloablen Zeigern auf die verwendeten Objekte erkennen kann ist, dass ich die Threadfunktion nicht so ganz ohne weiteres in eine andere Datei copy&amp;pasten könnte. Aber ansonsten...?</p>
<p>Und zu der Sache mit den Nummerierungen <em>enum</em>:<br />
Das war tatsächlich ganz einfach:<br />
In die stdafx.h damit und fertig, die Nummerierung steht dann überall zur Verfügung (und so ist das auch ganz praktisch für mich...:) )</p>
<p>Gruß,<br />
dong</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121266</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Mon, 21 Aug 2006 08:11:11 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Mon, 21 Aug 2006 12:41:36 GMT]]></title><description><![CDATA[<p>Der Vorteil von einem Struct ist eine Kapselung. Die Variablen liegen nicht einfach so frei im nichts rum und sind von jedem aufgreifbar. Du kannst mit einem Struct natürlich Referenzen, Zeiger aber auch Werte/Kopien dem Thread übergeben. Du kannst ja dann auch gleich mit dem Struct-Zeiger im Thread arbeiten und musst nicht zuerst alles rauskopieren oder so.</p>
<p>Diese Kapselung erhöht meiner Meinung nach die Übersicht. Der Code wird lesbarer, man versteht woher welche Informationen kommen.</p>
<p>Noch so als Zusatz: Zur Kommunikation zwischen den Threads sollte man auf CEvent's und PostThreadMessage / PostMessage setzen. Gleichzeitiges schreiben und lesen auf eine Variable, kann böse folgen haben.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121503</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 21 Aug 2006 12:41:36 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Mon, 21 Aug 2006 19:13:04 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Der Vorteil von einem Struct ist eine Kapselung. Die Variablen liegen nicht einfach so frei im nichts rum und sind von jedem aufgreifbar. Du kannst mit einem Struct natürlich Referenzen, Zeiger aber auch Werte/Kopien dem Thread übergeben. Du kannst ja dann auch gleich mit dem Struct-Zeiger im Thread arbeiten und musst nicht zuerst alles rauskopieren oder so.</p>
</blockquote>
<p>Ah ja. Da ich alleine programmiere, bin ich eigentlich immer ganz froh, wenn ich auf alles möglich zugreifen kann, aber ich sehe ein, dass das wohl eher schlechter Stil ist. <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="🙂"
    /></p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Diese Kapselung erhöht meiner Meinung nach die Übersicht. Der Code wird lesbarer, man versteht woher welche Informationen kommen.</p>
</blockquote>
<p>Das klingt in der Tat vernünftig....</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Noch so als Zusatz: Zur Kommunikation zwischen den Threads sollte man auf CEvent's und PostThreadMessage / PostMessage setzen. Gleichzeitiges schreiben und lesen auf eine Variable, kann böse folgen haben.</p>
</blockquote>
<p>Selbstgemachte CEvens und so kann ich noch nicht. Ist aber nicht so schlimm, bei kritischen Variablen habe ich dafür extra zwei Versionen der selben Variablen angelegt: Die eigentliche Variable und einen Puffer, der Wert des Puffers wird immer nur zu bestimmten, geeigneten Zeitpunkten der Variable übergeben. So sollte es hoffentlich auch erstmal gehen.</p>
<p>Aber wenn ich Zeit habe, werde ich mir die CEvents Geschichte mal näher ansehen, danke für den Hinweis. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121807</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Mon, 21 Aug 2006 19:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Tue, 22 Aug 2006 18:13:28 GMT]]></title><description><![CDATA[<p>Ich habe mittlerweile doch noch eine Möglichkeit gefunden das umzusetzen, was ich ürsprünglich vorhatte:<br />
Zwei verschiedene Variablen mit gleichen Namen und Dateigeltungsbereich.<br />
(Zur Erinnerung:)</p>
<p>dong schrieb:</p>
<blockquote>
<p>...<br />
Nicht erwünscht ist hingegen, dass ich in Beipiel1.cpp und in Beispiel2.cpp nicht den gleichen Namen für diese Art globale Variable verwenden darf, dann kommt eben der blöde LNK2005 Error:</p>
<pre><code class="language-cpp">//Besipiel1.cpp:
#include &quot;Beispiel1.h&quot;

//&quot;meine&quot; globale Variable:
int test;
</code></pre>
<pre><code class="language-cpp">//Besipiel2.cpp:
#include &quot;Beispiel2.h&quot;

//&quot;meine&quot; globale Variable:
int test;
</code></pre>
<p>geht deshalb eben nicht.</p>
<p>Und das ist (eine meiner zwei) Frage(n): Wie kann ich dafür gleiche Namen verwenden (die Variablen haben ja schließlich verschiedene Gültigkeitsbereiche!), aber LNK2005 vermeiden?</p>
</blockquote>
<p>Und zwar geht das folgendermaßen:<br />
Man legt diese Variablen einfach in namespaces:</p>
<pre><code class="language-cpp">//Besipiel1.cpp:
#include &quot;Beispiel1.h&quot;

namespace ns_beispiel1
{
    int test;
}
using namespace ns_beispiel1;
...
</code></pre>
<pre><code class="language-cpp">//Besipiel2.cpp:
#include &quot;Beispiel2.h&quot;

namespace ns_beispiel2
{
    int test;
}
using namespace ns_beispiel2;
...
</code></pre>
<p>--&gt; <em>test</em> in Beispiel1 und <em>test</em> in Beispiel2 sind zwei verschiedene, voneinander unabhängige Variablen mit Dateigeltungsbereich, und das ohne LNK2005 Error. <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="🙂"
    /></p>
<p>Wohlgemerkt geht das nur dann, wenn man diese Variable innerhalb einer namespae Deklaration in der cpp Datei macht, im Header treten komischerweise trotzdem die LNK2005 Error auf.</p>
<p>Gruß,<br />
Dong</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122353</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Tue, 22 Aug 2006 18:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Tue, 22 Aug 2006 18:44:28 GMT]]></title><description><![CDATA[<p>Tolle Lösung, und wieso ein extra Namespace machen und nicht einfach</p>
<pre><code class="language-cpp">// A.cpp
int test1;

// B.cpp
int test2;
</code></pre>
<p>LOL <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122371</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 22 Aug 2006 18:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage: globale Variablen in VS? (Insb. Vermeindung von LNK2005 bei mehrfacher Verwendung eines Namens) on Tue, 22 Aug 2006 18:54:05 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Tolle Lösung, und wieso ein extra Namespace machen und nicht einfach</p>
<pre><code class="language-cpp">// A.cpp
int test1;

// B.cpp
int test2;
</code></pre>
</blockquote>
<p>Weil ich in meinen Pendants zu Beispiel1 und Beispiel2 um Teil gleiche Codefragmente nutze, die sich so endlich direkt copy und pasten lassen ohne das ich etwas ersetzen müßte. Das Ersetzen (auch mit STRG + h...) scheint mir nämlich mehr Arbeit als die Erstellung der namespaces...</p>
<p>...außerdem habe ich jetzt, da ich die namespaces kennengelernt habe, den Eindruck, dass die Variablen darin sauberer aufgehoben sind, als wenn sie irgendwo frei darum liegen. (Und z.B. möglicherweise viel zu früh angelegt werden, auch, wenn sie noch gar nicht benötigt werden, aber sie werden eben als global (im Sinne Projektweit) angesehen sonst...)</p>
<p>Gruß,<br />
Dong</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1122374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1122374</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Tue, 22 Aug 2006 18:54:05 GMT</pubDate></item></channel></rss>