<?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[Wie *.cpp richtig compilieren?]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich richtig informiert bin interpretiert der ms vc compiler *.c Dateine als c-code und *.cpp dateien als c++ Code und man kann in *.cpp Dateinen normalen c-code bentzen. Ich habe jetzt eine Fensteranwendung und die Funktionen sind in 3 *.c Dateien und in der *.h Datei sind die Funktionen und auch Variablen hintherlegt die ich in beiden *.c Dateien verwende. Wenn ich jetzt die *.c Dateien in *.cpp Dateien umbennene dann motzt der Compiler mit folgender Fehlermeldung. Mit c als Dateiendung klappts, was mach ich falsch? Achja wenn ich alles in eine cpp datei reinpacke und die Headerdateiweglasse gehts auch.</p>
<pre><code class="language-cpp">Kompilierung läuft...
main.cpp
proceduren_winapi.cpp
tab_control.cpp
Linker-Vorgang läuft...
tab_control.obj : error LNK2005: &quot;struct HWND__ * tabControl&quot; (?tabControl@@3PAUHWND__@@A) bereits in main.obj definiert
tab_control.obj : error LNK2005: &quot;long (__stdcall* originalTabCtrlWndProc)(struct HWND__ *,unsigned int,unsigned int,long)&quot; (?originalTabCtrlWndProc@@3P6GJPAUHWND__@@IIJ@ZA) bereits in main.obj definiert
tab_control.obj : error LNK2005: &quot;struct HWND__ * mainWindow&quot; (?mainWindow@@3PAUHWND__@@A) bereits in main.obj definiert
release/main.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
Fehler beim Ausführen von link.exe.

main.exe - 4 Fehler, 0 Warnung(en)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/202946/wie-cpp-richtig-compilieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 00:00:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202946.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jan 2008 05:55:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie *.cpp richtig compilieren? on Thu, 17 Jan 2008 05:55:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich richtig informiert bin interpretiert der ms vc compiler *.c Dateine als c-code und *.cpp dateien als c++ Code und man kann in *.cpp Dateinen normalen c-code bentzen. Ich habe jetzt eine Fensteranwendung und die Funktionen sind in 3 *.c Dateien und in der *.h Datei sind die Funktionen und auch Variablen hintherlegt die ich in beiden *.c Dateien verwende. Wenn ich jetzt die *.c Dateien in *.cpp Dateien umbennene dann motzt der Compiler mit folgender Fehlermeldung. Mit c als Dateiendung klappts, was mach ich falsch? Achja wenn ich alles in eine cpp datei reinpacke und die Headerdateiweglasse gehts auch.</p>
<pre><code class="language-cpp">Kompilierung läuft...
main.cpp
proceduren_winapi.cpp
tab_control.cpp
Linker-Vorgang läuft...
tab_control.obj : error LNK2005: &quot;struct HWND__ * tabControl&quot; (?tabControl@@3PAUHWND__@@A) bereits in main.obj definiert
tab_control.obj : error LNK2005: &quot;long (__stdcall* originalTabCtrlWndProc)(struct HWND__ *,unsigned int,unsigned int,long)&quot; (?originalTabCtrlWndProc@@3P6GJPAUHWND__@@IIJ@ZA) bereits in main.obj definiert
tab_control.obj : error LNK2005: &quot;struct HWND__ * mainWindow&quot; (?mainWindow@@3PAUHWND__@@A) bereits in main.obj definiert
release/main.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
Fehler beim Ausführen von link.exe.

main.exe - 4 Fehler, 0 Warnung(en)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1438104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438104</guid><dc:creator><![CDATA[c++ noooob]]></dc:creator><pubDate>Thu, 17 Jan 2008 05:55:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wie *.cpp richtig compilieren? on Thu, 17 Jan 2008 06:52:02 GMT]]></title><description><![CDATA[<p>In den Headern sollten keine Definitionen stehen, sondern nur Deklarationen:</p>
<p>falsch:</p>
<pre><code class="language-cpp">//header.h
int global_value;
int get_value()
{
  return global_value;
...

//functions.c
#include &quot;header.h&quot;
...

//main.c
#include &quot;header.h&quot;
...
int main()
{
  ...
}
</code></pre>
<p>Jetzt erzeugt der Compiler aus den beiden Quell-Dateien jeweils eine .obj - und in beiden .obj stehen die Variable global_value und die Funktion get_value(). Woher soll da der Linker wissen, welche davon die &quot;echte&quot; ist?</p>
<p>richtig:</p>
<pre><code class="language-cpp">//header.h
extern int global_value;
int get_value();
...

//functions.c
#include &quot;header.h&quot;
int global_value;
int get_value()
{
  return global_value;
}
...

//main.c
#include &quot;header.h&quot;
...
int main()
{
  ...
}
</code></pre>
<p>Auch hier werden beide .obj Dateien angelegt, aber nur die functions.obj enthält die Definitionen - die main.obj enthält lediglich einen Verweis darauf, daß global_value und get_value() irgendwo existieren (der Verweis wird vom Linker ausgewertet).</p>
<p>PS: globale Variablen sind übrigens böse <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/1438121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438121</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 17 Jan 2008 06:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to Wie *.cpp richtig compilieren? on Thu, 17 Jan 2008 21:47:20 GMT]]></title><description><![CDATA[<p>Danke für den Hinweis, aber warum ist das nicht gut. Wie darf ich das verstehen?</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>PS: globale Variablen sind übrigens böse <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>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1438707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438707</guid><dc:creator><![CDATA[c++ noooob]]></dc:creator><pubDate>Thu, 17 Jan 2008 21:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wie *.cpp richtig compilieren? on Fri, 18 Jan 2008 07:16:55 GMT]]></title><description><![CDATA[<p>Aufgrund von Seiteneffekten und dadurch, dass diese Variablen, mehr oder weniger unkontrolliert von überall her geändert werden können sollte man diese aus OOP Sicht meiden (wie die Pest).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438777</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 18 Jan 2008 07:16:55 GMT</pubDate></item></channel></rss>