<?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 Deklaration in Header Datei]]></title><description><![CDATA[<p>Ich verstehe es einfach nicht mehr. Ich habe einen struct der so aussieht:</p>
<pre><code class="language-cpp">struct tagRoot {

    friend int WINAPI ::WinMain( HINSTANCE, HINSTANCE, LPSTR, int );

private:
    HINSTANCE _hInst;
    HINSTANCE _hPrevInst;
    LPSTR _lpszCmdLn;
    int _nCmdShow;

public:
    const HINSTANCE&amp; hInstance;
    const HINSTANCE&amp; hPreviousInstance;
    LPCSTR lpszCommandLine;
    const int nCommandShow;

tagRoot( void ) : hInstance( _hInst ), hPreviousInstance( _hPrevInst ), lpszCommandLine( _lpszCmdLn ), nCommandShow( _nCmdShow ) {}

} Root;
</code></pre>
<p>Wie zu entnehmen ist, wird die WinAPI verwendet. Die Parameter werden dann in diesem &quot;Root&quot; gespeichert (mir ist kein geeigneter Name eingefallen). Diese struct wird mit Root deklariert, in einer Header-Datei die wie üblich mit</p>
<pre><code class="language-cpp">#ifndef STRUCT_ROOT_INC_H
#define STRUCT_ROOT_INC_H

... Code ...

#endif /* STRUCT_ROOT_INC_H */
</code></pre>
<p>&quot;gesichert&quot; wird. Es hat den Anschein als würde dennoch der Header mehrfach eingefügt, ich bekomme folgende Fehler:<br />
error LNK2005: struct tagRoot Root(...) already defined in Test.obj</p>
<p>error LNK1169: one or more multiply defined symbols found</p>
<p>Blickt hier jemand mehr durch als ich?<br />
Ich möchte übrigens nicht die Variable Root als extern deklarieren, das würde alles unnötig verkomplizieren beim späteren, in mehreren Modulen Gebrauch.</p>
<p>Gruß, DarkDragon-1993</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275411/struct-deklaration-in-header-datei</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 02:02:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275411.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Oct 2010 09:33:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 09:33:00 GMT]]></title><description><![CDATA[<p>Ich verstehe es einfach nicht mehr. Ich habe einen struct der so aussieht:</p>
<pre><code class="language-cpp">struct tagRoot {

    friend int WINAPI ::WinMain( HINSTANCE, HINSTANCE, LPSTR, int );

private:
    HINSTANCE _hInst;
    HINSTANCE _hPrevInst;
    LPSTR _lpszCmdLn;
    int _nCmdShow;

public:
    const HINSTANCE&amp; hInstance;
    const HINSTANCE&amp; hPreviousInstance;
    LPCSTR lpszCommandLine;
    const int nCommandShow;

tagRoot( void ) : hInstance( _hInst ), hPreviousInstance( _hPrevInst ), lpszCommandLine( _lpszCmdLn ), nCommandShow( _nCmdShow ) {}

} Root;
</code></pre>
<p>Wie zu entnehmen ist, wird die WinAPI verwendet. Die Parameter werden dann in diesem &quot;Root&quot; gespeichert (mir ist kein geeigneter Name eingefallen). Diese struct wird mit Root deklariert, in einer Header-Datei die wie üblich mit</p>
<pre><code class="language-cpp">#ifndef STRUCT_ROOT_INC_H
#define STRUCT_ROOT_INC_H

... Code ...

#endif /* STRUCT_ROOT_INC_H */
</code></pre>
<p>&quot;gesichert&quot; wird. Es hat den Anschein als würde dennoch der Header mehrfach eingefügt, ich bekomme folgende Fehler:<br />
error LNK2005: struct tagRoot Root(...) already defined in Test.obj</p>
<p>error LNK1169: one or more multiply defined symbols found</p>
<p>Blickt hier jemand mehr durch als ich?<br />
Ich möchte übrigens nicht die Variable Root als extern deklarieren, das würde alles unnötig verkomplizieren beim späteren, in mehreren Modulen Gebrauch.</p>
<p>Gruß, DarkDragon-1993</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965435</guid><dc:creator><![CDATA[DarkDragon1993]]></dc:creator><pubDate>Thu, 14 Oct 2010 09:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 09:41:39 GMT]]></title><description><![CDATA[<p>Die C Programmierer sehen das anders, aber in C++ sprechen wir da von einer Struct-Definition.</p>
<pre><code class="language-cpp">struct tagRoot; // &lt;- Deklaration (keine Definition)

struct tagRoot { // &lt;- Definition (auch Deklaration, also beides)
  ...
};
</code></pre>
<p>Außerden <em>definierst</em> Du auch noch gleich ein Objekt namens <em>Root</em> dieses Typs. Offensichtlich bindest Du diese Headerdatei in mehr als einer Übersetzungseinheit ein. Damit handelst Du Dir zwei Definitionen dieses Objekts ein; denn ein #include ist nichts weiter als eine Textersetzung. Davor schützen auch die Include-Guards nicht. Include-Guards sind dafür da, zu verhindern, dass ein Header mehrfach in <em>einer</em> Übersetzungseinheit eingebunden wird.</p>
<p>Du hast Nachholbedarf, was die <a href="http://en.wikipedia.org/wiki/One_Definition_Rule" rel="nofollow">ODR</a> angeht. Die steht auch in jedem guten C++ Buch erkärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965439</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 14 Oct 2010 09:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 09:40:11 GMT]]></title><description><![CDATA[<p>Du versuchst im Konstruktor Attribute Werte von Attributen zuzuweisen, die selbst noch keinen Wert haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965440</guid><dc:creator><![CDATA[NEO.PIXEL]]></dc:creator><pubDate>Thu, 14 Oct 2010 09:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 09:41:59 GMT]]></title><description><![CDATA[<p>Ja, du hast da nämlich keine reine Definition gemacht, sondern auch noch eine konkrete Objektinstanz namens Root angelegt. Oder anders ausgedrückt: Was hat das Root da zu suchen?</p>
<p>edit: Da brauche ich nur 30 Sekunden vom Lesen bis zu Antwort und in der Zeit kommen mir schon zwei Leute zuvor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965441</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 14 Oct 2010 09:41:59 GMT</pubDate></item><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 09:42:31 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>edit: Da brauche ich nur 30 Sekunden vom Lesen bis zu Antwort und in der Zeit kommen mir schon zwei Leute zuvor.</p>
</blockquote>
<p>So geht's mir ständig auf <a href="http://stackoverflow.com" rel="nofollow">stackoverflow.com</a>. Total frustrierend. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1965442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965442</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 14 Oct 2010 09:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 09:51:24 GMT]]></title><description><![CDATA[<p>Uff, so viele Antworten in so kurzer Zeit... xD<br />
Danke schonmal.<br />
Ja, ich habe etwas Nachholbedarf, was die ODR betrifft. Und das mit dem Deklarieren und Definieren habe ich wohl leider gerade unglücklich vertauscht, tut mir Leid... ^^'</p>
<p>Gut, das mit der einen Übersetzungseinheit war mir nicht klar. Also habe ich im Fazit eigentlich keine andere Wahl als das Root als extern zu deklarieren und in nur einem einzigen Modul zu definieren?</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja, du hast da nämlich keine reine Definition gemacht, sondern auch noch eine konkrete Objektinstanz namens Root angelegt. Oder anders ausgedrückt: Was hat das Root da zu suchen?.</p>
</blockquote>
<p>Ist mir klar, will ich auch. Ich will das Root global erreichbar machen...</p>
<p>Gut, werde mir einen anderen Lösungsweg einfallen lassen. Dennoch wäre es schön, das ganze ohne extern hinzukriegen... Irgendwelche Vorschläge? Ist mir leicht peinlich das zu fragen. <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/1965446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965446</guid><dc:creator><![CDATA[DarkDragon1993]]></dc:creator><pubDate>Thu, 14 Oct 2010 09:51:24 GMT</pubDate></item><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 10:02:50 GMT]]></title><description><![CDATA[<p>Alles klar, es hat geklappt. Ich hab eigentlich noch Namespaces drin, ich hab den extern Befehl in den Namespace gehämmert, wodurch das Root im Namespace definiert war. Der Fehler...: Ich wollte das Root dann global ansprechen und hab mich gewundert, warum das nicht funktioniert. Jetzt hab ich den Befehl außerhalb des Namespaces und es funktioniert alles einwandfrei.</p>
<p>So ein dummer Fehler. o_o<br />
Danke für eure Antworten!</p>
<p>Mit freundlichen Grüßen,</p>
<p>DarkDragon1993</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965449</guid><dc:creator><![CDATA[DarkDragon1993]]></dc:creator><pubDate>Thu, 14 Oct 2010 10:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to struct Deklaration in Header Datei on Thu, 14 Oct 2010 10:42:11 GMT]]></title><description><![CDATA[<p>DarkDragon1993 schrieb:</p>
<blockquote>
<p>Alles klar, es hat geklappt.</p>
</blockquote>
<p>Aha. Du solltest noch <a href="http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.14" rel="nofollow">das</a> hier wissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965463</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 14 Oct 2010 10:42:11 GMT</pubDate></item></channel></rss>