<?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[Linkerfehler]]></title><description><![CDATA[<p>Hallo, ich hab leider ein Problem mit dem Linker:</p>
<p>Ich habe 2 cpp Dateien und deren dazugehörigen Headerdateien:</p>
<p>Beispiel:</p>
<p>Header1.h:</p>
<pre><code class="language-cpp">struct wichtig
{
	int Zahl;
}Zahlen;
class Header1
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
</code></pre>
<p>die dazugehörige cpp datei:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

void Header1::Funktion()
{
	int jj;
	jj = Zahll2;
	jj = Zahlen.Zahl;
}
</code></pre>
<p>Header2.h:</p>
<pre><code class="language-cpp">class Header2
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
</code></pre>
<p>Die cpp-Datei:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

void Header2::Funktion()
{
	int JJ = 3;
	JJ = Zahlen.Zahl;

}
</code></pre>
<p>Die ganzen Headerdateien werden in der Datei stdafx.h eingebunden:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &quot;Header1.h&quot;
#include &quot;Header2.h&quot;

int Zahll2;
</code></pre>
<p>die dazu gehörige cpp datei sieht so aus:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

int main(int argc, char* argv[])
{
	printf(&quot;Hello World!\n&quot;);
	return 0;
}
</code></pre>
<p>Das ganze soll das Problem vereinfachen, die reellen Klassen sind wesentlich komplexer, aber bei diesem Beispiel tritt der Fehler auch schon auf.</p>
<p>Das Problem ist jetzt, dass jedesmal der Linkerfehler kommt:<br />
Header2.obj : error LNK2005: &quot;struct wichtig Zahlen&quot; (?Zahlen@@3Uwichtig@@A) already defined in StdAfx.obj</p>
<p>Das liegt wahrscheinlich daran, das die zugehörigen Cpp-dateien jedesmal die Headerdatei stdafx.h einbinden. Dieses ist aber notwendig, da dort in dem reellen Beispiel eine Klasse definiert ist, die jeder kennen muss. (das soll durch die int Zahl &quot;Zahll2;&quot; symbolisiert werden.</p>
<p>Was muss ich machen, damit der Linkerfehler nicht mehr auftritt, aber die Daten aus stdafx.h auch allen cpp-Dateien bekannt sind?</p>
<p>Vielen Dank für eine Antwort</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193460/linkerfehler</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 00:45:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193460.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Sep 2007 11:04:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 11:04:02 GMT]]></title><description><![CDATA[<p>Hallo, ich hab leider ein Problem mit dem Linker:</p>
<p>Ich habe 2 cpp Dateien und deren dazugehörigen Headerdateien:</p>
<p>Beispiel:</p>
<p>Header1.h:</p>
<pre><code class="language-cpp">struct wichtig
{
	int Zahl;
}Zahlen;
class Header1
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
</code></pre>
<p>die dazugehörige cpp datei:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

void Header1::Funktion()
{
	int jj;
	jj = Zahll2;
	jj = Zahlen.Zahl;
}
</code></pre>
<p>Header2.h:</p>
<pre><code class="language-cpp">class Header2
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
</code></pre>
<p>Die cpp-Datei:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

void Header2::Funktion()
{
	int JJ = 3;
	JJ = Zahlen.Zahl;

}
</code></pre>
<p>Die ganzen Headerdateien werden in der Datei stdafx.h eingebunden:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &quot;Header1.h&quot;
#include &quot;Header2.h&quot;

int Zahll2;
</code></pre>
<p>die dazu gehörige cpp datei sieht so aus:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

int main(int argc, char* argv[])
{
	printf(&quot;Hello World!\n&quot;);
	return 0;
}
</code></pre>
<p>Das ganze soll das Problem vereinfachen, die reellen Klassen sind wesentlich komplexer, aber bei diesem Beispiel tritt der Fehler auch schon auf.</p>
<p>Das Problem ist jetzt, dass jedesmal der Linkerfehler kommt:<br />
Header2.obj : error LNK2005: &quot;struct wichtig Zahlen&quot; (?Zahlen@@3Uwichtig@@A) already defined in StdAfx.obj</p>
<p>Das liegt wahrscheinlich daran, das die zugehörigen Cpp-dateien jedesmal die Headerdatei stdafx.h einbinden. Dieses ist aber notwendig, da dort in dem reellen Beispiel eine Klasse definiert ist, die jeder kennen muss. (das soll durch die int Zahl &quot;Zahll2;&quot; symbolisiert werden.</p>
<p>Was muss ich machen, damit der Linkerfehler nicht mehr auftritt, aber die Daten aus stdafx.h auch allen cpp-Dateien bekannt sind?</p>
<p>Vielen Dank für eine Antwort</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372980</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 11:09:06 GMT]]></title><description><![CDATA[<p>Du hast in jeder deiner CPP-Dateien eine eigene globale Variable 'Zahlen' angelegt, die nun miteinander in Konflikt kommen. Wie du diesen Konflikt löst, hängt jetzt vom Sinn dieser Variablen ab:</p>
<ul>
<li>beide Klassen brauchen eine eigene Version der Variablen - definiere sie als 'static' (dann sieht der Linker sie nicht mehr)</li>
<li>beide Klassen benötigen die selbe Variable - defklariere sie als 'extern' im Header (mehrfache Deklarationen sind erlaubt) und schreib ein 'wichtig Zahlen;' in eine der CPP's</li>
</ul>
<p>(PS: Ich hoffe mal, du hast die Dateien mit Include-Guards geschützt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372984</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 11:12:22 GMT]]></title><description><![CDATA[<p>Nach einem Schnellblick gehe ich schwer davon aus, dass überall s.g. Include-Guards fehlen. Diese verhindern das Mehrfachinkludieren von Header-Dateien:</p>
<pre><code class="language-cpp">#ifndef FOO_IRGENDWAS_HPP
#define FOO_IRGENDWAS_HPP

// ... Klassen- und Funktionsdeklarationen hier

#endif
</code></pre>
<p>Sinn der Sache ist, dass ein Header wirklich nur einmal eingebunden wird.</p>
<p>Grüße...</p>
<p>Heiko</p>
<p>EDIT: Richtiges Schreiben ist schon schwer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372989</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:12:22 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 11:14:46 GMT]]></title><description><![CDATA[<p>bwbg schrieb:</p>
<blockquote>
<p>Nach einem Schnellblick gehe ich schwer davon aus, dass überall s.g. Include-Guards fehlen. Diese verhindern das Mehrfachinkludieren von Header-Dateien:</p>
</blockquote>
<p>Nein, Probleme mit den Include-Guards verursachen Compilerfehler, keine Linkerfehler. Es ist schon so, wie CStoll es beschrieben hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372992</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 11:17:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct data
{
	unsigned int value_one;
	unsigned long value_two;
	data() : value_one(0), value_two(0L) {}
};

#include &lt;cassert&gt;

class foo
{
public:
	foo(data* ptr) : m_data(ptr) {}

public:
	void func() { assert(m_data != NULL); ++m_data-&gt;value_one; }

private:
	data*	m_data;
};

class bar
{
public:
	bar(data* ptr) : m_data(ptr) {}

public:
	void func() { assert(m_data != NULL); m_data-&gt;value_one += 10; }

private:
	data*	m_data;
};

int main()
{
	data inst;
	foo(&amp;inst) foo_inst;
	foo_inst.func();
	bar(&amp;inst) bar_inst;
	bar_inst.func();
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372997</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:17:04 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 11:22:56 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>bwbg schrieb:</p>
<blockquote>
<p>Nach einem Schnellblick gehe ich schwer davon aus, dass überall s.g. Include-Guards fehlen. Diese verhindern das Mehrfachinkludieren von Header-Dateien:</p>
</blockquote>
<p>Nein, Probleme mit den Include-Guards verursachen Compilerfehler, keine Linkerfehler. Es ist schon so, wie CStoll es beschrieben hat.</p>
</blockquote>
<p>... es ist ja auch kein Problem <strong>mit</strong> Include-Guards, sondern ohne ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Ansonsten gehe ich mit CStoll d'accord.</p>
<p>Grüße...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373005</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Wed, 26 Sep 2007 11:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 12:29:44 GMT]]></title><description><![CDATA[<p>Hallo, vielen Dank für die schnellen Antworten!!</p>
<p>Ich programmier leider noch nicht soviel CPP, ich denke aber, das ein Include Guard dabei ist, so hab ich das zumindest verstanden. Ich verwende Visual C++ Professional.</p>
<p>Ich hab versucht den Tipp mit extern umzusetzen, da die Funktionen alle auf die gleiche Variable zugereifen sollen, die Header sehen jetzt so aus:</p>
<pre><code class="language-cpp">struct wichtig
{
	int Zahl;
}Zahlen;

class Header1
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
</code></pre>
<p>und</p>
<pre><code class="language-cpp">extern wichtig Zahlen;

class Header2
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
</code></pre>
<p>Die cpp dateien so:</p>
<pre><code class="language-cpp">#include &quot;StdAfx.h&quot;

wichtig Zahlen;

void Header1::Funktion()
{
	int jj;

	jj = Zahlen.Zahl;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">#include &quot;StdAfx.h&quot;

wichtig Zahlen;

void Header2::Funktion()
{
	int JJ = 3;
	JJ = Zahlen.Zahl;

}
</code></pre>
<p>Jetzt meckert aber der Compiler:<br />
C:\Dokumente und Einstellungen\Andy\Desktop\dfghsdgh\Header1.cpp(4) : error C2086: 'Zahlen' : redefinition</p>
<p>Tut mir leid, aber was habe ich falsch gemacht, vielen Dank nochmal</p>
<p>Viele Grüße<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373073</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Wed, 26 Sep 2007 12:29:44 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 15:36:29 GMT]]></title><description><![CDATA[<p>Andreas_L schrieb:</p>
<blockquote>
<p>...ich denke aber, das ein Include Guard dabei ist...</p>
</blockquote>
<p>=&gt;</p>
<p>Andreas_L schrieb:</p>
<blockquote>
<p>...<br />
Jetzt meckert aber der Compiler:<br />
C:\Dokumente und Einstellungen\Andy\Desktop\dfghsdgh\Header1.cpp(4) : error C2086: 'Zahlen' : redefinition<br />
...</p>
</blockquote>
<p>Offensichtlich nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>&quot;include guard&quot; ist kein Feature eines C++-Compilers, sondern eine Programmiertechnik (sprich: &quot;Etwas, das Du in Deinem Source machen musst&quot;), die genau solche &quot;Redefinitions&quot; verhindert.</p>
<p>In Deinem Fall würde ich Folgendes machen:</p>
<ul>
<li>globale Variablen vermeiden (Hier: &quot;Zahlen&quot;)</li>
<li>... erst Recht in Headern,</li>
<li>&quot;precompiled Headers&quot; abschalten (in Deiner &quot;Visual Studio&quot;-Entwicklungsumgebung) und</li>
<li>Jeden Header mit folgendem Block einfassen:</li>
</ul>
<pre><code class="language-cpp">#ifndef HEADERNAME_INCLUDE_GUARD
#define HEADERNAME_INCLUDE_GUARD

// .... Hier kommt dann Dein Source

#endif // HEADERNAME_INCLUDE_GUARD
</code></pre>
<p>Letzteres ist Dein &quot;Include Guard&quot; (&quot;HEADERNAME&quot; sollte natürlich für den Namen des jeweiligen Headerfiles stehen und nicht überalle gleich heißen).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373085</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 12:53:02 GMT]]></title><description><![CDATA[<p>Danke,<br />
jetzt siehts so aus:</p>
<pre><code class="language-cpp">#ifdef HEADER1_INCLUDE_GUARD 
#define HEADER1_INCLUDE_GUARD 
struct wichtig
{
	int Zahl;
}Zahlen;

class Header1
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};

#endif // HEADER1_INCLUDE_GUARD
</code></pre>
<p>und</p>
<pre><code class="language-cpp">#ifdef HEADER2_INCLUDE_GUARD 
#define HEADER2_INCLUDE_GUARD 

extern wichtig Zahlen;

class Header2
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
#endif
</code></pre>
<pre><code class="language-cpp">// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//
#ifdef StdAfx_INCLUDE_GUARD 
#define StdAfx_INCLUDE_GUARD 

#if !defined(AFX_STDAFX_H__0B335010_3D3D_4528_892F_2AE1F3666FF2__INCLUDED_)
#define AFX_STDAFX_H__0B335010_3D3D_4528_892F_2AE1F3666FF2__INCLUDED_

#if _MSC_VER &gt; 1000
#pragma once
#endif // _MSC_VER &gt; 1000

#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers

#include &lt;stdio.h&gt;
#include &quot;Header1.h&quot;
#include &quot;Header2.h&quot;

#endif

// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__0B335010_3D3D_4528_892F_2AE1F3666FF2__INCLUDED_)
</code></pre>
<p>An den Cpp-Dateien hat sich ja nichts verändert.</p>
<p>Jetzt meckert er in den Cpp datein immer:<br />
C:\Dokumente und Einstellungen\Andy\Desktop\dfghsdgh\Header1.cpp(4) : error C2146: syntax error : missing ';' before identifier 'Zahlen'</p>
<pre><code class="language-cpp">#include &quot;StdAfx.h&quot;

wichtig Zahlen;

void Header1::Funktion()
{
	int jj;

	jj = Zahlen.Zahl;
}
</code></pre>
<p>Du meintest, dass man möglichst keine Globalen Variablen machen sollte.<br />
Aber was soll man machen, wenn eine Struktur von mehreren Klassen verwendet wird?<br />
Mit der obigen Änderung hab ich dann aber doch ein Include-Guard, oder nciht?<br />
Gab es nicht auch soetwas mit #pragma once?</p>
<p>Was muss man denn jetzt noch machen, damit er das endlich komplett übersetzt?</p>
<p>Viele Grüße<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373095</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Wed, 26 Sep 2007 12:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 12:54:29 GMT]]></title><description><![CDATA[<p>Die extern-Deklaration gehört ja auch in den Header:</p>
<pre><code class="language-cpp">struct wichtig
{
  int Zahl;
}

extern wichtig Zahlen;

class Header1
{
  ...
};
</code></pre>
<p>(noch besser ist es natürlich, wenn du auf die externe Variable komplett verzichtest)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373096</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 26 Sep 2007 12:54:29 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 13:04:38 GMT]]></title><description><![CDATA[<p>Danke, aber irgendwie klappt jetzt gar nichts mehr:</p>
<p>In die Headerdateien sollte der Includeguard. zudem sollte dort die Variable mit extern definiert werden:</p>
<pre><code class="language-cpp">#ifdef HEADER1_INCLUDE_GUARD 
#define HEADER1_INCLUDE_GUARD 

struct wichtig
{
	int Zahl;
};
extern wichtig Zahlen;

class Header1
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};

#endif // HEADER1_INCLUDE_GUARD
</code></pre>
<p>und</p>
<pre><code class="language-cpp">#ifdef HEADER2_INCLUDE_GUARD 
#define HEADER2_INCLUDE_GUARD 

extern wichtig Zahlen;

class Header2
{
	void Funktion();
	void Funktion3()
	{
		int Zahl = Zahlen.Zahl;
	}
};
#endif
</code></pre>
<p>In die CPP Dateien sollte ich doch wichtig Zahlen reinschreiben:</p>
<pre><code class="language-cpp">#include &quot;StdAfx.h&quot;

wichtig Zahlen;

void Header1::Funktion()
{
	int jj;

	jj = Zahlen.Zahl;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">#include &quot;StdAfx.h&quot;

wichtig Zahlen;

void Header2::Funktion()
{
	int JJ = 3;
	JJ = Zahlen.Zahl;

}
</code></pre>
<p>Bei stdafx.h hab ich das einfach so belassen, wie es bei Mircrosoft vorgegeben wurde:</p>
<pre><code class="language-cpp">// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__0B335010_3D3D_4528_892F_2AE1F3666FF2__INCLUDED_)
#define AFX_STDAFX_H__0B335010_3D3D_4528_892F_2AE1F3666FF2__INCLUDED_

#if _MSC_VER &gt; 1000
#pragma once
#endif // _MSC_VER &gt; 1000

#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers

#include &lt;stdio.h&gt;
#include &quot;Header1.h&quot;
#include &quot;Header2.h&quot;

// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__0B335010_3D3D_4528_892F_2AE1F3666FF2__INCLUDED_)
</code></pre>
<p>Die Probleme bleiben aber immer noch:<br />
C:\Dokumente und Einstellungen\Andy\Desktop\dfghsdgh\Header1.cpp(4) : error C2146: syntax error : missing ';' before identifier 'Zahlen'</p>
<p>Wenn ich dann Zahlen auskommentiere kommt:</p>
<p>C:\Dokumente und Einstellungen\Andy\Desktop\dfghsdgh\Header1.cpp(6) : error C2653: 'Header1' : is not a class or namespace name</p>
<p>Das deutet doch dann darauf hin, dass Header1.h überhaupt nicht mehr eingebunden wurde oder nicht?</p>
<p>Ich hatte in der ersten Headerdatei nicht extern davor geschrieben, weil ich extern so verstanden habe, dass der nur darauf verweist, dass die Variable woanders definiert wird. In Header1 wird sie aber definiert, deshalb dachte ich muss man extern da weglassen.</p>
<p>Viele Grüße</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373109</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Wed, 26 Sep 2007 13:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 13:13:25 GMT]]></title><description><![CDATA[<p>Erstens: Du sollst in EINER CPP-Datei die Variable definieren.</p>
<p>Zweitens: In Header2 ist der Typ &quot;wichtig&quot; nicht bekannt, da macht die Definition Probleme.</p>
<p>PS: Wofür soll die Variable 'Zahlen' eigentlich gut sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373122</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 26 Sep 2007 13:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 14:08:04 GMT]]></title><description><![CDATA[<p>HI, die Variable Zahlen sollte einfach nur als Beispiel dienen.</p>
<p>In meinem realen Projekt habe ich nämlich eine Struktur, in der VerkaufsPreise definiert werden.<br />
Zu Beginn werden diese Preise aus einer INI-Datei ausgelesen und in der Struktur gespeichert.<br />
Nun sollen die verchiedenen Klassen darauf zugreifen können, deshalb sollte eine globale Variable vorhanden sein, auf die jede Klasse einfach zugreifen kann.<br />
Ich hab jetzt die Variablen als Member gemacht, damit gehts, hätte micht nur mal interessiert, warum sich der Linker immer beklagt.</p>
<p>Eine letzte Frage noch:<br />
Bisher hab ich keinen IncludeGuard verwendet und es gab keine Compilerfehler.<br />
Muss ich das trotzdem noch ändern, weil so wie ich den IncludeGuard eben hatte ging es ja nicht.</p>
<p>Viele Grüße<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373164</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Wed, 26 Sep 2007 14:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 14:13:03 GMT]]></title><description><![CDATA[<p>Der Linker beschwert sich, weil die selbe Variable in mehreren Übersetzungseinheiten definiert wurde - und er jetzt nicht weiß, welches die &quot;richtige&quot; ist.</p>
<p>Ich würde übrigens die wichtig-Klasse mit allem in eine eigene Datei auslagern, anstatt sie an eine der Header-Klassen anzuhängen (in der nächsten Entwicklungsstufe sogar als Singleton angelegt:</p>
<pre><code class="language-cpp">//wichtig.h
struct wichtig
{
  int Zahl;
};

extern wichtig Zahlen;

//wichtig.cpp
#include &quot;wichtig.h&quot;
wichtig Zahlen

//HeaderX.h
#include &quot;wichtig.h&quot;
class HeaderX
{
  ...
};

//HeaderX.cpp
#include &quot;HeaderX.h&quot;
...

//main.cpp
#include &quot;Header1.h&quot;
#include &quot;Header2.h&quot;

int main()
{...}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1373172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373172</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 26 Sep 2007 14:13:03 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 14:31:14 GMT]]></title><description><![CDATA[<p>Danke, werd mal gucken wie ich das so umsetzen kann <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/1373182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373182</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Wed, 26 Sep 2007 14:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 14:40:22 GMT]]></title><description><![CDATA[<p>Was vielleicht auch nicht ganz unwichtig ist:</p>
<p>#if<strong>n</strong>def (if not defined)</p>
<p>statt</p>
<p>#ifdef (ifdef)</p>
<p>oder aber die Variante von (D)evil, welche ich persönlich noch nicht ausprobiert habe.</p>
<p>Grüße...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373187</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Wed, 26 Sep 2007 14:40:22 GMT</pubDate></item><item><title><![CDATA[Reply to Linkerfehler on Wed, 26 Sep 2007 15:39:38 GMT]]></title><description><![CDATA[<p>bwbg schrieb:</p>
<blockquote>
<p>Was vielleicht auch nicht ganz unwichtig ist:</p>
<p>#if<strong>n</strong>def (if not defined)<br />
...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Oh ja !! Sorry !!!</p>
<p>Mein Fehler,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373219</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 26 Sep 2007 15:39:38 GMT</pubDate></item></channel></rss>