<?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[globale strukturen bilden]]></title><description><![CDATA[<p>hallo leute,</p>
<p>ich habe folgendes problem:</p>
<p>ich möchte eine gobale struktur in einem header definieren, um sie im gesammten programm verwenden zu können.</p>
<p>mein code sieht so aus:</p>
<p><strong>global.h</strong></p>
<pre><code class="language-cpp">#ifndef GLOBAL_H_INCLUDED
#define GLOBAL_H_INCLUDED

struct global {
    bool myLoop;
};

extern global commonGlobals;

commonGlobals.myLoop = true;

#endif
</code></pre>
<p><strong>main.cpp</strong></p>
<pre><code class="language-cpp">while(commonGlobals.myLoop) {
    //tu was
}
</code></pre>
<p>wenn ich das ganze kompilieren will, meldet der compiler (gcc):<br />
<em>error: expected constructor, destructor, or type conversion before '.' token</em> in zeile 11 (genau da wo ich der struktur den wert zuweisen will).</p>
<p>ich versteh nicht was ich falsch mach, da ich es in diversen beispielen genau so gesehen habe.</p>
<p>noch etwas: wenn ich die ganze struktur mit initialisierung und so in main.cpp packe und von einer anderen datei (z.b. test.cpp) zugreifen möchte, meldtet der compiler folgendes:<br />
<em>C++\Dark Way\events.cpp|8|error: `commonGlobals' was not declared in this scope|</em></p>
<p>meine idee war erst, die struktur in eine *.cpp datei umzulagern (ist aber eher unübglich, oder?) und diese dann in jeder datei, in der sie gebraucht wird zu includen. gibt es keine bessere lösung?</p>
<p>danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/216964/globale-strukturen-bilden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 01:15:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216964.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Jul 2008 11:18:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to globale strukturen bilden on Tue, 01 Jul 2008 11:18:02 GMT]]></title><description><![CDATA[<p>hallo leute,</p>
<p>ich habe folgendes problem:</p>
<p>ich möchte eine gobale struktur in einem header definieren, um sie im gesammten programm verwenden zu können.</p>
<p>mein code sieht so aus:</p>
<p><strong>global.h</strong></p>
<pre><code class="language-cpp">#ifndef GLOBAL_H_INCLUDED
#define GLOBAL_H_INCLUDED

struct global {
    bool myLoop;
};

extern global commonGlobals;

commonGlobals.myLoop = true;

#endif
</code></pre>
<p><strong>main.cpp</strong></p>
<pre><code class="language-cpp">while(commonGlobals.myLoop) {
    //tu was
}
</code></pre>
<p>wenn ich das ganze kompilieren will, meldet der compiler (gcc):<br />
<em>error: expected constructor, destructor, or type conversion before '.' token</em> in zeile 11 (genau da wo ich der struktur den wert zuweisen will).</p>
<p>ich versteh nicht was ich falsch mach, da ich es in diversen beispielen genau so gesehen habe.</p>
<p>noch etwas: wenn ich die ganze struktur mit initialisierung und so in main.cpp packe und von einer anderen datei (z.b. test.cpp) zugreifen möchte, meldtet der compiler folgendes:<br />
<em>C++\Dark Way\events.cpp|8|error: `commonGlobals' was not declared in this scope|</em></p>
<p>meine idee war erst, die struktur in eine *.cpp datei umzulagern (ist aber eher unübglich, oder?) und diese dann in jeder datei, in der sie gebraucht wird zu includen. gibt es keine bessere lösung?</p>
<p>danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539056</guid><dc:creator><![CDATA[erloeser]]></dc:creator><pubDate>Tue, 01 Jul 2008 11:18:02 GMT</pubDate></item><item><title><![CDATA[Reply to globale strukturen bilden on Tue, 01 Jul 2008 11:40:21 GMT]]></title><description><![CDATA[<p>erloeser schrieb:</p>
<blockquote>
<pre><code class="language-cpp">commonGlobals.myLoop = true;
</code></pre>
<p>[...]<br />
wenn ich das ganze kompilieren will, meldet der compiler (gcc):<br />
<em>error: expected constructor, destructor, or type conversion before '.' token</em> in zeile 11 (genau da wo ich der struktur den wert zuweisen will).</p>
</blockquote>
<p>Eine Zuweisung ist eine Anweisung, und Anweisungen dürfen nur in Funktionen stehen. Du willst eine Initialisierung:</p>
<pre><code class="language-cpp">global commonGlobals = { true };
</code></pre>
<p>Da das eine Definition darstellt, hat das im Header nichts zu suchen und gehört in eine cpp-Datei global.cpp.</p>
<blockquote>
<p>ich versteh nicht was ich falsch mach, da ich es in diversen beispielen genau so gesehen habe.</p>
</blockquote>
<p>Unwahrscheinlich.</p>
<blockquote>
<p>noch etwas: wenn ich die ganze struktur mit initialisierung und so in main.cpp packe und von einer anderen datei (z.b. test.cpp) zugreifen möchte, meldtet der compiler folgendes:<br />
<em>C++\Dark Way\events.cpp|8|error: `commonGlobals' was not declared in this scope|</em></p>
</blockquote>
<p>Dann hast du wohl den Header nicht eingebunden. Da steht ja die extern-Deklaration von commonGlobals drin, also müsste er sie ja sonst sehen ...</p>
<blockquote>
<p>meine idee war erst, die struktur in eine *.cpp datei umzulagern (ist aber eher unübglich, oder?) und diese dann in jeder datei, in der sie gebraucht wird zu includen.</p>
</blockquote>
<p>Es ist unüblich, Implementationsdateien irgendwo einzubinden. (Ausnahmen macht man vielleicht bei Templates, nennt die dann aber auch nicht .cpp.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539065</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 01 Jul 2008 11:40:21 GMT</pubDate></item><item><title><![CDATA[Reply to globale strukturen bilden on Tue, 01 Jul 2008 13:50:26 GMT]]></title><description><![CDATA[<p>also, ich habe jetzt die definition in die global.cpp gepackt.<br />
in global.cpp ist außerdem eine funktion, um die globalen variablen zu initialisieren.<br />
im header steht nurnoch der funktionsprototype und die struktur.</p>
<p>ich möchte diese (globale) variable z.b. in events.cpp benutzen:<br />
also include ich den header (global.h).</p>
<p>leider funktioniert das so nicht, da der compiler meckert (<em>`commonGlobals' was not declared in this scope</em>) ...</p>
<p>so sieht mein code jetzt aus:</p>
<p><strong>global.cpp</strong></p>
<pre><code class="language-cpp">#include &quot;global.h&quot;

extern global commonGlobals;

void initGlobals() {
    commonGlobals.myLoop = true;
}
</code></pre>
<p><strong>global.h</strong></p>
<pre><code class="language-cpp">#ifndef GLOBAL_H_INCLUDED
#define GLOBAL_H_INCLUDED

void initGlobals();

struct global {
    bool myLoop;
};

#endif
</code></pre>
<p><strong>events.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;SDL.h&gt;
#include &quot;global.h&quot;
#include &quot;events.h&quot;

void handleEvent(SDL_Event keyEvent) {
    initGlobals(); //steht eigendlich in der main.cpp und ist nur aus platzgründen hier
	switch (keyEvent.type) {
		case SDL_QUIT:
			commonGlobals.myLoop = false;
			break;

		case SDL_KEYDOWN:
			switch (keyEvent.key.keysym.sym) {
				case SDLK_ESCAPE:
                    commonGlobals.myLoop = false;
					break;

                default:
                    break;
			}
			break;
	}
}
</code></pre>
<p><strong>events.h</strong></p>
<pre><code class="language-cpp">#ifndef EVENTS_H_INCLUDED
#define EVENTS_H_INCLUDED

void handleEvent(SDL_Event);

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1539140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539140</guid><dc:creator><![CDATA[erloeser]]></dc:creator><pubDate>Tue, 01 Jul 2008 13:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to globale strukturen bilden on Tue, 01 Jul 2008 14:14:00 GMT]]></title><description><![CDATA[<p>Die Deklaration von commonGlobals ( <code>extern global commonGlobals;</code> ) gehört in den Header. Die Definition ( <code>global commonGlobals;</code> ) seh ich bei dir nirgends, die gehört in die cpp. Wenn du eine Initialisierungsfunktion hast brauchst du keine explizite Initialisierung der Struktur, wie ich oben vorgeschlagen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539159</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 01 Jul 2008 14:14:00 GMT</pubDate></item><item><title><![CDATA[Reply to globale strukturen bilden on Tue, 01 Jul 2008 14:25:14 GMT]]></title><description><![CDATA[<p>danke, es klappt!</p>
<p>nochmal zur verständnis:<br />
man unterscheidet zwischen deklaration und definition (und initialisierung).</p>
<p>deklaration kommt in die header<br />
definition in die hauptdatei (*.c / *.pp)</p>
<p>eine deklaration ist die bekanntmachung eienr variable o.ä<br />
eine definition ist quasi die angelegte definition<br />
initialisierung ist eine wertzuweisung</p>
<p>ich glaube ich habs verstanden.</p>
<p>danke nochmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539167</guid><dc:creator><![CDATA[erloeser]]></dc:creator><pubDate>Tue, 01 Jul 2008 14:25:14 GMT</pubDate></item></channel></rss>