<?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[probleme mit globalen variablen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Problem mit globalen Variablen</p>
<p>Mein code:</p>
<p>globals.h:</p>
<pre><code class="language-cpp">#ifndef GLOBALS_H
#define GLOBALS_H

char Ship[20];
unsigned int Ship_met, Ship_kris, Ship_deut, Ship_struktur, Ship_schild, Ship_angriff;

#endif
</code></pre>
<p>calcs.cpp:</p>
<pre><code class="language-cpp">#ifndef CALCS_CPP
#define CALCS_CPP
#include &quot;globals.h&quot;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

...
...

void getShipInfo()
{
  string in;
  string valid_ships[]={&quot;Kleiner_Transporter&quot;, &quot;kleiner_transporter&quot;, &quot;Großer_Transporter&quot;,
                         &quot;großer_transporter&quot;, &quot;Leichter_Jaeger&quot;, &quot;leichter_jaeger&quot;,
                         &quot;Schwerer_Jaeger&quot;, &quot;schwerer_jaeger&quot;, &quot;Kreuzer&quot;, &quot;kreuzer&quot;,
                         &quot;Schlachtschiff&quot;, &quot;schlachtschiff&quot;, &quot;Kolonieschiff&quot;, &quot;kolonieschiff&quot;,
                         &quot;Recycler&quot;, &quot;recycler&quot;, &quot;Spionagesonde&quot;, &quot;spionagesonde&quot;, &quot;Bomber&quot;,
                         &quot;bomber&quot;, &quot;Solarsatellit&quot;, &quot;solarsatellit&quot;, &quot;Zerstoerer&quot;, &quot;zerstoerer&quot;,
                         &quot;Todesstern&quot;, &quot;todesstern&quot;, &quot;Schlachtkreuzer&quot;, &quot;schlachtkreuzer&quot;,
                         &quot;Hilfe&quot;, &quot;hilfe&quot;};
  enum valid_ships_words{Kleiner_Transporter, kleiner_transporter, Grosser_Transporter,
                         grosser_transporter, Leichter_Jaeger, leichter_jaeger,
                         Schwerer_Jaeger, schwerer_jaeger, Kreuzer, kreuzer,
                         Schlachtschiff, schlachtschiff, Kolonieschiff, kolonieschiff,
                         Recycler, recycler, Spionagesonde, spionagesonde, Bomber,
                         bomber, Solarsatellit, solarsatellit, Zerstoerer, zerstoerer,
                         Todesstern, todesstern, Schlachtkreuzer, schlachtkreuzer,
                         Hilfe, hilfe};           // Das mag etwas brutal klingen ist aber nur für ein browsergame

  int count = sizeof(valid_ships)/sizeof(std::string);

  bool error = true;

  ifstream data(&quot;Data/schiffe.dat&quot;);

  if(data.good())
  {
    do
    {
      cin &gt;&gt; in;

      switch(find(valid_ships, valid_ships + count, in) - valid_ships)
      {
         ...
         ...
         case schlachtschiff:
         case Schlachtschiff:
         {
           data.seekg(0, ios_base::beg);

           for(int x = 0; x &lt; 5; x++)
             data.ignore( numeric_limits&lt; streamsize &gt;::max(), '\n' );

           data &gt;&gt; Ship; cout &lt;&lt; Ship &lt;&lt; endl;                // Die ausgaben sind nur zum testen
           data &gt;&gt; Ship_met; cout &lt;&lt; Ship_met &lt;&lt; endl;
           data &gt;&gt; Ship_kris; cout &lt;&lt; Ship_kris &lt;&lt; endl;
           data &gt;&gt; Ship_deut; cout &lt;&lt; Ship_deut &lt;&lt; endl;
           data &gt;&gt; Ship_struktur; cout &lt;&lt; Ship_struktur &lt;&lt; endl;
           data &gt;&gt; Ship_schild; cout &lt;&lt; Ship_schild &lt;&lt; endl;
           data &gt;&gt; Ship_angriff; cout &lt;&lt; Ship_angriff &lt;&lt; endl &lt;&lt; endl;

           error = false;
           break;
         }
         ...
         ...
       }
    }while(error == true);
  }
  else
  {
    cout &lt;&lt; &quot;FEHLER: Die Datei Data/schiffe.dat konnte nicht geoeffnet werden!\n&quot;;
  }
}

...
...

#endif
</code></pre>
<p>Data/schiffe.dat:</p>
<pre><code>Kleiner_Transporter 2000 2000 0 4000 10 5
Großer_Transporter 6000 6000 0 12000 25 5
Leichter_Jaeger 3000 1000 0 4000 10 50
Schwerer_Jaeger 6000 4000 0 10000 25 150
Kreuzer 20000 7000 2000 27000 50 400
Schlachtschiff 45000 15000 0 60000 200 1000
Kolonieschiff 10000 20000 10000 30000 100 50
Recycler 10000 60000 2000 16000 10 1
Spionagesonde 0 1000 0 1000 0 0
Bomber 50000 25000 15000 75000 500 1000
Solarsatellit 0 2000 500 2000 1 1
Zerstoerer 60000 50000 15000 110000 500 2000
Todesstern 5000000 4000000 1000000 9000000 50000 200000
Schlachtkreuzer 30000 40000 15000 70000 400 700
</code></pre>
<p>Hauptprogramm:</p>
<pre><code class="language-cpp">#include &quot;globals.h&quot;
#include &quot;calcs.cpp&quot;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

int main()
{
...
getShipInfo();cout &lt;&lt; Ship_schild;
...
return 0;
}
</code></pre>
<p>es lässt sich compilieren allerdings mit Warnungen:</p>
<pre><code>Warning: Das als public deklarierte Symbol '_Ship' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_met' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_kris' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_deut' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_struktur' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_schild' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_angriff' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert
</code></pre>
<p>Leider weiß ich nicht was das bedeuten soll.</p>
<p>Das Problem ist wenn ich in der main() die variablen abrufen will haben die den wert 0.</p>
<p>Ausgegeben wird:</p>
<pre><code>45000
15000
0
60000
200
1000

0
</code></pre>
<p>Mfg Yazoo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200826/probleme-mit-globalen-variablen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 03:09:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200826.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Dec 2007 08:39:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to probleme mit globalen variablen on Thu, 20 Dec 2007 08:39:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe ein Problem mit globalen Variablen</p>
<p>Mein code:</p>
<p>globals.h:</p>
<pre><code class="language-cpp">#ifndef GLOBALS_H
#define GLOBALS_H

char Ship[20];
unsigned int Ship_met, Ship_kris, Ship_deut, Ship_struktur, Ship_schild, Ship_angriff;

#endif
</code></pre>
<p>calcs.cpp:</p>
<pre><code class="language-cpp">#ifndef CALCS_CPP
#define CALCS_CPP
#include &quot;globals.h&quot;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

...
...

void getShipInfo()
{
  string in;
  string valid_ships[]={&quot;Kleiner_Transporter&quot;, &quot;kleiner_transporter&quot;, &quot;Großer_Transporter&quot;,
                         &quot;großer_transporter&quot;, &quot;Leichter_Jaeger&quot;, &quot;leichter_jaeger&quot;,
                         &quot;Schwerer_Jaeger&quot;, &quot;schwerer_jaeger&quot;, &quot;Kreuzer&quot;, &quot;kreuzer&quot;,
                         &quot;Schlachtschiff&quot;, &quot;schlachtschiff&quot;, &quot;Kolonieschiff&quot;, &quot;kolonieschiff&quot;,
                         &quot;Recycler&quot;, &quot;recycler&quot;, &quot;Spionagesonde&quot;, &quot;spionagesonde&quot;, &quot;Bomber&quot;,
                         &quot;bomber&quot;, &quot;Solarsatellit&quot;, &quot;solarsatellit&quot;, &quot;Zerstoerer&quot;, &quot;zerstoerer&quot;,
                         &quot;Todesstern&quot;, &quot;todesstern&quot;, &quot;Schlachtkreuzer&quot;, &quot;schlachtkreuzer&quot;,
                         &quot;Hilfe&quot;, &quot;hilfe&quot;};
  enum valid_ships_words{Kleiner_Transporter, kleiner_transporter, Grosser_Transporter,
                         grosser_transporter, Leichter_Jaeger, leichter_jaeger,
                         Schwerer_Jaeger, schwerer_jaeger, Kreuzer, kreuzer,
                         Schlachtschiff, schlachtschiff, Kolonieschiff, kolonieschiff,
                         Recycler, recycler, Spionagesonde, spionagesonde, Bomber,
                         bomber, Solarsatellit, solarsatellit, Zerstoerer, zerstoerer,
                         Todesstern, todesstern, Schlachtkreuzer, schlachtkreuzer,
                         Hilfe, hilfe};           // Das mag etwas brutal klingen ist aber nur für ein browsergame

  int count = sizeof(valid_ships)/sizeof(std::string);

  bool error = true;

  ifstream data(&quot;Data/schiffe.dat&quot;);

  if(data.good())
  {
    do
    {
      cin &gt;&gt; in;

      switch(find(valid_ships, valid_ships + count, in) - valid_ships)
      {
         ...
         ...
         case schlachtschiff:
         case Schlachtschiff:
         {
           data.seekg(0, ios_base::beg);

           for(int x = 0; x &lt; 5; x++)
             data.ignore( numeric_limits&lt; streamsize &gt;::max(), '\n' );

           data &gt;&gt; Ship; cout &lt;&lt; Ship &lt;&lt; endl;                // Die ausgaben sind nur zum testen
           data &gt;&gt; Ship_met; cout &lt;&lt; Ship_met &lt;&lt; endl;
           data &gt;&gt; Ship_kris; cout &lt;&lt; Ship_kris &lt;&lt; endl;
           data &gt;&gt; Ship_deut; cout &lt;&lt; Ship_deut &lt;&lt; endl;
           data &gt;&gt; Ship_struktur; cout &lt;&lt; Ship_struktur &lt;&lt; endl;
           data &gt;&gt; Ship_schild; cout &lt;&lt; Ship_schild &lt;&lt; endl;
           data &gt;&gt; Ship_angriff; cout &lt;&lt; Ship_angriff &lt;&lt; endl &lt;&lt; endl;

           error = false;
           break;
         }
         ...
         ...
       }
    }while(error == true);
  }
  else
  {
    cout &lt;&lt; &quot;FEHLER: Die Datei Data/schiffe.dat konnte nicht geoeffnet werden!\n&quot;;
  }
}

...
...

#endif
</code></pre>
<p>Data/schiffe.dat:</p>
<pre><code>Kleiner_Transporter 2000 2000 0 4000 10 5
Großer_Transporter 6000 6000 0 12000 25 5
Leichter_Jaeger 3000 1000 0 4000 10 50
Schwerer_Jaeger 6000 4000 0 10000 25 150
Kreuzer 20000 7000 2000 27000 50 400
Schlachtschiff 45000 15000 0 60000 200 1000
Kolonieschiff 10000 20000 10000 30000 100 50
Recycler 10000 60000 2000 16000 10 1
Spionagesonde 0 1000 0 1000 0 0
Bomber 50000 25000 15000 75000 500 1000
Solarsatellit 0 2000 500 2000 1 1
Zerstoerer 60000 50000 15000 110000 500 2000
Todesstern 5000000 4000000 1000000 9000000 50000 200000
Schlachtkreuzer 30000 40000 15000 70000 400 700
</code></pre>
<p>Hauptprogramm:</p>
<pre><code class="language-cpp">#include &quot;globals.h&quot;
#include &quot;calcs.cpp&quot;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

int main()
{
...
getShipInfo();cout &lt;&lt; Ship_schild;
...
return 0;
}
</code></pre>
<p>es lässt sich compilieren allerdings mit Warnungen:</p>
<pre><code>Warning: Das als public deklarierte Symbol '_Ship' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_met' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_kris' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_deut' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_struktur' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_schild' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert

Warning: Das als public deklarierte Symbol '_Ship_angriff' ist in den beiden Modulen C:\***\CALCS.OBJ und C:\***\OGAME CALC.OBJ definiert
</code></pre>
<p>Leider weiß ich nicht was das bedeuten soll.</p>
<p>Das Problem ist wenn ich in der main() die variablen abrufen will haben die den wert 0.</p>
<p>Ausgegeben wird:</p>
<pre><code>45000
15000
0
60000
200
1000

0
</code></pre>
<p>Mfg Yazoo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423588</guid><dc:creator><![CDATA[Yazoo]]></dc:creator><pubDate>Thu, 20 Dec 2007 08:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit globalen variablen on Thu, 20 Dec 2007 08:48:34 GMT]]></title><description><![CDATA[<p>Das heißt, daß du in jeder Übersetzungseinheit eine Kopie der globalen Variablen definiert hast - und die existieren dann nebeneinander. In deinem Header benötigst du nur Deklarationen (extern) und die zugehörigen Definitionen in EINEM der Quellfiles.</p>
<p>PS: Aber ich würde dir empfehlen, komplett auf globale Variablen zu verzichten und alle Werte in ein struct zu packen - und dann diese struct's als Parameter/Rückgabewerte herumzureichen.</p>
<p>PPS: Wenn du die Eingabe des Schiffsnamens in Kleinbuchstaben umwandelst (tolower()), kannst du einiges an Platz sparen - und kannst auch Eingaben wie &quot;SCHLACHTSCHIFF&quot; entgegennehmen.</p>
<p>P3S: Und ich würde die komplette Datei einmal einlesen und in einer geeigneten Datenstruktur (map&lt;&gt;, set&lt;&gt;) unterbringen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423591</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Dec 2007 08:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit globalen variablen on Thu, 20 Dec 2007 09:08:28 GMT]]></title><description><![CDATA[<p>wenn ich nach cin &gt;&gt; in; in = tolwoer(in); mache, dann sagt mein compiler fehler string lässt sich nicht zu int convertieren. was muss ich machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423601</guid><dc:creator><![CDATA[Yazoo]]></dc:creator><pubDate>Thu, 20 Dec 2007 09:08:28 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit globalen variablen on Thu, 20 Dec 2007 09:09:43 GMT]]></title><description><![CDATA[<p>tolower() arbeitet mit einem einzelnen Zeichen - die Funktion mußt du in einer Schleife (oder mit transform()) auf alle Zeichen der Eingabe anwenden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423603</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Dec 2007 09:09:43 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit globalen variablen on Thu, 20 Dec 2007 09:25:32 GMT]]></title><description><![CDATA[<p>ich krieg das irgendtwie net hin, kannst mir das mal als code zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423613</guid><dc:creator><![CDATA[Yazoo]]></dc:creator><pubDate>Thu, 20 Dec 2007 09:25:32 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit globalen variablen on Thu, 20 Dec 2007 09:29:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">cin&gt;&gt;eingabe;
for(int i=0;i&lt;eingabe.length();++i)
  eingabe[i]=tolower(eingabe[i]);

//oder

cin&gt;&gt;eingabe;
transform(eingabe.begin(),eingabe.end(),tolower);
</code></pre>
<p>(die letzte Variante könnte ein Problem mit der Überladungsauflösung haben - notfalls brauchst du eine Zwischenfunktion)</p>
<p>PS: Aber bevor du dich um solche Kleinigkeiten kümmerst, solltest du erstmal dein Design überdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423615</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Dec 2007 09:29:15 GMT</pubDate></item></channel></rss>