<?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[Struct in Header]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte für ein Projekt im Header ein struct erzeugen, das während der gesamten Laufzeit eines Programms gerechnete und richtige Aufgaben zählt. Leider klappt das überhaupt nicht. Entweder bekomme ich Fehlermeldungen oder die Werte werden ständig wieder auf Default zurück gesetzt. Derzeit sieht das ganze so aus:</p>
<pre><code class="language-cpp">Projekt.h

struct Analyse
{
	int Aufgabenzahl_ges;
	int Aufgabenzahl_ges_richtig;
	Analyse()
	{
		Aufgabenzahl_ges=5;
		Aufgabenzahl_ges_richtig=0;
	}
};

extern struct Analyse Ana1;
</code></pre>
<pre><code class="language-cpp">Menue.cpp
#include &quot;Projekt.h&quot;

...

Ana1.Aufgabenzahl_ges=Ana1.Aufgabenzahl_ges + Aufgabenzahl;

...
</code></pre>
<pre><code class="language-cpp">Rechnung.cpp
#include &quot;Projekt.h&quot;

...

if (Eingabe==Rechnungsergebniss) 
{
Ana1.Aufgabenzahl_ges_richtig=Ana1.Aufgabenzahl_ges_richtig+1;
}

...
</code></pre>
<p>Die derzeitige Fehlermeldung ist</p>
<p>1&gt;Menue.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;struct Analyse Ana1&quot; (?Ana1@@3UAnalyse@@A)&quot;.<br />
1&gt;Rechnung.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;struct Analyse Ana1&quot; (?Ana1@@3UAnalyse@@A)&quot; in Funktion &quot;&quot;void __cdecl Rechnung(int,char)&quot; (?Rechnung@@YAXHD@Z)&quot;.</p>
<p>Wenn ich in die .cpp Datein noch jeweils</p>
<pre><code class="language-cpp">struct Analyse Ana1;
</code></pre>
<p>einfüge läuft das Programm zwar super. Allerdings werden wie bisher bereits erwähnt die Werte des structs nach jedem neuen Menüaufruf wieder auf Default gesetzt.</p>
<p>Ich hoffe mir kann jemand einen Tipp geben.</p>
<p>Danke schonmal für die Mühe <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/topic/289297/struct-in-header</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 04:04:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289297.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Jul 2011 06:22:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struct in Header on Sat, 02 Jul 2011 06:22:06 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte für ein Projekt im Header ein struct erzeugen, das während der gesamten Laufzeit eines Programms gerechnete und richtige Aufgaben zählt. Leider klappt das überhaupt nicht. Entweder bekomme ich Fehlermeldungen oder die Werte werden ständig wieder auf Default zurück gesetzt. Derzeit sieht das ganze so aus:</p>
<pre><code class="language-cpp">Projekt.h

struct Analyse
{
	int Aufgabenzahl_ges;
	int Aufgabenzahl_ges_richtig;
	Analyse()
	{
		Aufgabenzahl_ges=5;
		Aufgabenzahl_ges_richtig=0;
	}
};

extern struct Analyse Ana1;
</code></pre>
<pre><code class="language-cpp">Menue.cpp
#include &quot;Projekt.h&quot;

...

Ana1.Aufgabenzahl_ges=Ana1.Aufgabenzahl_ges + Aufgabenzahl;

...
</code></pre>
<pre><code class="language-cpp">Rechnung.cpp
#include &quot;Projekt.h&quot;

...

if (Eingabe==Rechnungsergebniss) 
{
Ana1.Aufgabenzahl_ges_richtig=Ana1.Aufgabenzahl_ges_richtig+1;
}

...
</code></pre>
<p>Die derzeitige Fehlermeldung ist</p>
<p>1&gt;Menue.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;struct Analyse Ana1&quot; (?Ana1@@3UAnalyse@@A)&quot;.<br />
1&gt;Rechnung.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;struct Analyse Ana1&quot; (?Ana1@@3UAnalyse@@A)&quot; in Funktion &quot;&quot;void __cdecl Rechnung(int,char)&quot; (?Rechnung@@YAXHD@Z)&quot;.</p>
<p>Wenn ich in die .cpp Datein noch jeweils</p>
<pre><code class="language-cpp">struct Analyse Ana1;
</code></pre>
<p>einfüge läuft das Programm zwar super. Allerdings werden wie bisher bereits erwähnt die Werte des structs nach jedem neuen Menüaufruf wieder auf Default gesetzt.</p>
<p>Ich hoffe mir kann jemand einen Tipp geben.</p>
<p>Danke schonmal für die Mühe <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/2087566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087566</guid><dc:creator><![CDATA[Perhalo]]></dc:creator><pubDate>Sat, 02 Jul 2011 06:22:06 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sat, 02 Jul 2011 06:57:14 GMT]]></title><description><![CDATA[<p>hast du in deinem Header Codeguards, einen pragma Eintrag oder deinen Compiler so eingestellt das dein Header nur genau 1 mal in dein Projekt aufgenommen wird?</p>
<p>Welche der genannten Möglichkeiten bei dir möglich sind ist abhängig vom Compiler.<br />
Die Codeguards sind, glaube ich, bei allen C++ Compilern möglich.</p>
<p>MfG f.-th.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087569</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Sat, 02 Jul 2011 06:57:14 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sat, 02 Jul 2011 07:03:01 GMT]]></title><description><![CDATA[<p>Ich habs bisher so versucht</p>
<pre><code class="language-cpp">#pragma once
#ifndef Projekt_H
#define	Projekt_H
...
</code></pre>
<p>Ist das richtig so? Bringt aber nichts <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>Ich benutze MS Visual Studio 2010 Ultimate. Wo ich das einstelle, was du erwähnt hast, weiß ich leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087571</guid><dc:creator><![CDATA[Perhalo]]></dc:creator><pubDate>Sat, 02 Jul 2011 07:03:01 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sat, 02 Jul 2011 07:20:03 GMT]]></title><description><![CDATA[<p>@f-th: Linker-Probleme kannst du nicht durch Include-Guards beheben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26360">@Perhalo</a>: Du benötigst den Eintrag <code>Analyse Ana1;</code> (das &quot;struct&quot; ist dort redundant) in <strong>genau einer</strong> CPP-Datei - ohne kommt der genannte Linker-Fehler, bei mehreren kommt normalerweise ein anderer Fehler (&quot;mehrfache Definition&quot;).<br />
Die <code>extern</code> Angabe im Header ist eine reine Deklaration - die besagt nur &quot;irgendwo existiert eine Variable mit dem Namen Ana1&quot;. Das ist dem Compiler genug, um den Code zu übersetzen (er setzt dann bei Verwendung nur eine Notiz, daß hier diese Variable benötigt wird). Der Linker benötigt <strong>genau eine</strong> echte Definition (ohne extern - an der Stelle wird der Compiler tatsächlich Speicherplatz für die Variable reservieren) und ersetzt all diese Notizen dann durch einen Verweis auf genau diese Definition.</p>
<p>PS: Übrigens gelten globale Variablen als &quot;schlechtes Design&quot; - wenn du eine Möglichkeit hast, bau dein Programm ohne sowas auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087577</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Jul 2011 07:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sat, 02 Jul 2011 07:24:01 GMT]]></title><description><![CDATA[<p>Hallo Perhalo,</p>
<p>du scheinst in jeder Funktion &quot;struct Analyse Ana1;&quot; (toller Name <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="😉"
    /> eingefügt zu haben.<br />
Setze diese Definition mal global in <strong>eine</strong> Sourcedatei (Projekt.cpp) und lösche alle lokalen Variablen gleichen Namens.</p>
<p>Und wenn das Programm dann läuft, dann versuche auf globale Variablen zu verzichten, indem du Referenzen dieses Objektes an die anderen Funktionen weitergibst.<br />
Verwendest du denn schon Klassen in deinem Programm, dann könntest du diese Referenz als Klassenmember speichern (und im Konstruktor übergeben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087580</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 02 Jul 2011 07:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sat, 02 Jul 2011 07:30:11 GMT]]></title><description><![CDATA[<p>Leider ist das explizit so in der Aufgabenstellung verlangt:</p>
<p>&quot;Datenstruktur</p>
<p>Erzeugen Sie in der Headerdatei eine Struct, in der Informationen über die Anzahl der Aufgaben und die Anzahl der richtigen Lösungen gespeichert sind. Die Defaultwerte des Struct sind 5 Aufgaben und 0 richtige Lösungen.&quot;</p>
<p>Wenn ich ich jetzt nur in meinem Menue.cpp</p>
<p>struct Analyse Ana1;</p>
<p>einfüge, kann die Datai Rechnung.cpp nicht darauf zugreifen. Lässt sich das Problem irgendwie lösen oder muss ich versuchen das irgendwie mit return Werten hinzubekommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087581</guid><dc:creator><![CDATA[Perhalo]]></dc:creator><pubDate>Sat, 02 Jul 2011 07:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sat, 02 Jul 2011 08:08:26 GMT]]></title><description><![CDATA[<p>Erstens: In der Aufgabenstellung steht nichts von globalen Objekten (außer du hast einen Teil unterschlagen).<br />
Zweitens: Wenn du schon auf die globale Variable zugreifen willst, dann achte darauf, <strong>wo</strong> du etwas definierst. Wie Th69 schon sagte, hast du vermutlich in jeder Funktion eine lokale Variable angelegte, die (a) die globale und externe Variable überdeckt und (b) bei jedem Funktionsaufruf neu initialisiert wird. Was du benötigst, ist <strong>EINE</strong> Definition der globalen Variablen:</p>
<pre><code class="language-cpp">//falsch - lokale Variable verdeckt dein globales struct:
//Rechnung.cpp
#include &quot;Projekt.h&quot;

int rechne()
{
  struct Analyse Ana1;//nur innerhalb der Funktion gültig
  ...
  if (Eingabe==Rechnungsergebniss) 
  {
    Ana1.Aufgabenzahl_ges_richtig=Ana1.Aufgabenzahl_ges_richtig+1;
  }
  ...
}

/******************************************************************************/

//besser - Definition der globalen Variable
//Projekt.cpp
#include &quot;Projekt.h&quot;

struct Analyse Ana1;

//Rechnung.cpp
#include &quot;Projekt.h&quot;
int rechne()
{
  //hier keine lokale Definition -&gt; Ana1 bezieht sich auf dein globales struct
  ...
  if (Eingabe==Rechnungsergebniss) 
  {
    Ana1.Aufgabenzahl_ges_richtig=Ana1.Aufgabenzahl_ges_richtig+1;
  }
  ...
}

/******************************************************************************/
//noch besser - Verzicht auf globale Variablen
//Projekt.h
#ifndef PROJEKT_H
#define PROJEKT_H
struct Analyse
{
    int Aufgabenzahl_ges;
    int Aufgabenzahl_ges_richtig;
    Analyse()
    {
        Aufgabenzahl_ges=5;
        Aufgabenzahl_ges_richtig=0;
    }
};
#endif

//Rechnung.cpp
#include &quot;Projekt.h&quot;
int rechne(struct Analyse&amp; Ana1)//das richtige Objekt wird als Parameter übergeben
{
  ...
  if (Eingabe==Rechnungsergebniss) 
  {
    Ana1.Aufgabenzahl_ges_richtig=Ana1.Aufgabenzahl_ges_richtig+1;
  }
  ...
}

//main.cpp
#include &quot;Projekt.h&quot;
#include &quot;Rechnung.h&quot;
...
int main()
{
  ...
  struct Analyse myAna;
  int erg = rechne(myAna);
  ...
}
</code></pre>
<p>(Ja, ich weiß selber, daß die ganzen &quot;struct&quot; vor den Variablen-Definitionen redundant sind)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2087590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2087590</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Jul 2011 08:08:26 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sun, 03 Jul 2011 11:33:23 GMT]]></title><description><![CDATA[<p>Danke schonmal für Deine Hilfe. Leider habe ich das Problem immer noch nicht ganz behoben bekommen, weil das Programm doch insgesamt noch etwas komplexer ist. Auch wenn es etwas mehr ist, poste ich den wichtigen Teil jetzt einfach mal. Ich hoffe damit kann jemand etwas anfangen.<br />
Das Problem ist, dass ich mein Menü immer wieder aufrufen muss bis der Benutzer es beendet. Deshalb hab ich das jetzt so versucht:</p>
<pre><code class="language-cpp">main.cpp

int main()
{
	struct Analyse myAna;
	bool M=1;

	while (M)
	{
		M=Menue(myAna);
	}

	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
<pre><code class="language-cpp">Menue.cpp
bool Menue(struct Analyse&amp; Ana1)
{
	char Operator;
	int Aufgabenzahl;
	bool Start;
	bool Ergebnisse;

	cout &lt;&lt; &quot;Willkommen zum Rechentrainer!&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Geben Sie 0 zum Beenden des Programms ein, ansonsten 1&quot; &lt;&lt; endl;cin &gt;&gt; Start; cout &lt;&lt; endl;

	if (Start==0) 
	{
		cout &lt;&lt; &quot;Danke, dass Sie den Rechentrainer benutzt haben!&quot; &lt;&lt; endl;
		AuswertungProzent(Ana1.Aufgabenzahl_ges_richtig, Ana1.Aufgabenzahl_ges);
		return 0;
	}
	else 
	{
		cout &lt;&lt; &quot;Geben Sie 0 ein, wenn Sie ihre gesamten bisherigen Ergebnisse wissen moechten. Ansonsten 1&quot; &lt;&lt; endl; cin&gt;&gt; Ergebnisse; cout &lt;&lt; endl;
		if (Ergebnisse==0)
		{
			cout &lt;&lt; &quot;Sie haben bisher  &quot; &lt;&lt; Ana1.Aufgabenzahl_ges &lt;&lt; &quot;  Aufgaben gerechnet.&quot; &lt;&lt; endl;
			cout &lt;&lt; &quot;Davon waren  &quot; &lt;&lt; Ana1.Aufgabenzahl_ges_richtig &lt;&lt; &quot;  Aufgaben richtig.&quot; &lt;&lt; endl;
		}
		cout &lt;&lt; &quot;Waehlen Sie eine Rechenoperation(+ oder -): &quot;; cin &gt;&gt; Operator; cout &lt;&lt; endl;
		cout &lt;&lt; &quot;Waehlen Sie ihre Aufgabenzahl: &quot;; cin &gt;&gt; Aufgabenzahl; cout &lt;&lt; endl;

		Ana1.Aufgabenzahl_ges=Ana1.Aufgabenzahl_ges + Aufgabenzahl;
		Ana1.Aufgabenzahl_ges_richtig= Ana1.Aufgabenzahl_ges_richtig+Rechnung(Aufgabenzahl, Operator);
		cout &lt;&lt; &quot;Sie haben insgesamt &quot; &lt;&lt; Ana1.Aufgabenzahl_ges_richtig &lt;&lt; &quot; mal richtig gerechnet&quot; &lt;&lt; endl;
		return 1;
	}

}
</code></pre>
<p>Ich bekomme jetzt wieder den Fehler mit dem unaufgelösten Symbol. Kann es sein, dass ich meine struct-Werte wieder zurückgeben lassen muss?</p>
<p>Hoffe der Code erschlägt niemanden, danke sehr! <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/2088078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088078</guid><dc:creator><![CDATA[Perhalo]]></dc:creator><pubDate>Sun, 03 Jul 2011 11:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sun, 03 Jul 2011 11:45:28 GMT]]></title><description><![CDATA[<p>Du bekommst anscheinend einen Linker Fehler. Das bedeutet, dass menue.cpp nicht korrekt zum Projekt hinzugefügt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088081</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 03 Jul 2011 11:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sun, 03 Jul 2011 12:17:20 GMT]]></title><description><![CDATA[<p>Ich glaube nicht. Wenn ich mein struct global im Menue verkünde, läuft das Programm. Der komplette Fehler zu dem Code oben heißt</p>
<p>1&gt;main.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;bool __cdecl Menue(struct Analyse)&quot; (?Menue@@YA_NUAnalyse@@@Z)&quot;.<br />
1&gt;C:\uni\c++\Projekt 1. Semester(Rechentester)\Projekt\Debug\Projekt.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088096</guid><dc:creator><![CDATA[Perhalo]]></dc:creator><pubDate>Sun, 03 Jul 2011 12:17:20 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sun, 03 Jul 2011 12:21:57 GMT]]></title><description><![CDATA[<p>Hast du die Referenz bei der Deklaration der Funktion angegeben?</p>
<pre><code class="language-cpp">// Code
bool Menue(struct Analyse&amp; Ana1)

// Fehlermeldung
bool Menue(struct Analyse)
</code></pre>
<p>Ausserdem kannst du das <code>struct</code> vor Variablendeklarationen weglassen, das macht niemand in C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088099</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 03 Jul 2011 12:21:57 GMT</pubDate></item><item><title><![CDATA[Reply to Struct in Header on Sun, 03 Jul 2011 13:48:40 GMT]]></title><description><![CDATA[<p>Ah danke, hab tatsächlich vergessen die Fkt. richtig zu deklarieren <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>Danke an alle für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088161</guid><dc:creator><![CDATA[Perhalo]]></dc:creator><pubDate>Sun, 03 Jul 2011 13:48:40 GMT</pubDate></item></channel></rss>