<?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[probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express)]]></title><description><![CDATA[<p>Hi,<br />
habe ein Problem, wollte ein bischen üben mit Klassen zu programmieren, aber irgendwie mache ich etwas falsch, oder visual C++ 2005 express spinnt total..<br />
Ich bekomme ein paar Fehler beim linken:</p>
<blockquote>
<p>------ Erstellen gestartet: Projekt: Klasse fighter, Konfiguration: Release Win32 ------<br />
Kompilieren...<br />
main.cpp<br />
fighter.cpp<br />
Code wird generiert...<br />
Verknüpfen...<br />
main.obj : error LNK2005: &quot;public: bool __thiscall Fighter::init(class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; const &amp;,int,int,int,int)&quot; (?init@Fighter@@QAE_NABV?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>i</mi><mi>c</mi><mi mathvariant="normal">_</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>g</mi><mi mathvariant="normal">@</mi><mi>D</mi><mi>U</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">basic\_string@DU?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:1.00444em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit">b</span><span class="mord mathit">a</span><span class="mord mathit">s</span><span class="mord mathit">i</span><span class="mord mathit">c</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.02778em;">D</span><span class="mord mathit" style="margin-right:0.10903em;">U</span><span class="mclose">?</span></span></span></span>char_traits@D@std@@V?$allocator@D@2@@std@@HHHH@Z) ist bereits in fighter.obj definiert.<br />
main.obj : error LNK2005: &quot;public: bool __thiscall Fighter::takeDmg(int)&quot; (?takeDmg@Fighter@@QAE_NH@Z) ist bereits in fighter.obj definiert.<br />
main.obj : error LNK2005: &quot;public: void __thiscall Fighter::heal(void)&quot; (?heal@Fighter@@QAEXXZ) ist bereits in fighter.obj definiert.<br />
main.obj : error LNK2005: &quot;public: void __thiscall Fighter::display(void)&quot; (?display@Fighter@@QAEXXZ) ist bereits in fighter.obj definiert.<br />
F:\VisualC++\projects\Klasse fighter\Release\Klasse fighter.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.<br />
Das Buildprotokoll wurde unter &quot;file://f:\VisualC++\projects\Klasse fighter\Klasse fighter\Release\BuildLog.htm&quot; gespeichert.<br />
Klasse fighter - 5 Fehler, 0 Warnung(en)<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========</p>
</blockquote>
<p>In meinem Code kann ich jedenfalls keine Fehler finden, mMn. müsste das eigentlich funktionieren...<br />
hier mal mein Code, wäre nett wenn es jemand versuchen könnte zu kompilieren.</p>
<p>fighter.h</p>
<pre><code>//fighter.h
#ifndef _FIGHTER_
#define _FIGHTER_
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class Fighter
{
private:
	int life;
	int maxlife;
	int mana;
	int maxmana;
	int defence;
	int dmg;
	string name;

public:
	bool init(const string&amp;,int,int,int,int);
	bool takeDmg(int);
	void display();
	void heal();
};
#endif
</code></pre>
<p>fighter.cpp</p>
<pre><code>//fighter.cpp
#include &lt;iostream&gt;
#include &quot;fighter.h&quot;
using namespace std;

bool Fighter::init(const string&amp; i_name,int	i_maxlife,int i_maxmana,int i_defence,int i_dmg)
{
	if(i_name.size() &lt; 1)
		return false;
	name = i_name;
	maxlife = i_maxlife;
	maxmana = i_maxmana;
	life = maxlife;
	mana = maxmana;
	defence = i_defence;
	dmg = i_dmg;
	return true;
}

bool Fighter::takeDmg(int a)
{
	a = a - defence;
	if(a&lt;0)
		a=0;
	life = life - a;
	if(life&lt;=0)
		return false;
	return true;
}

void Fighter::heal()
{
	life = maxlife;
	mana = maxmana;
}

void Fighter::display()
{
	cout&lt;&lt;&quot;name: &quot;&lt;&lt;name&lt;&lt;endl;
	cout&lt;&lt;&quot;life: &quot;&lt;&lt;life&lt;&lt;&quot; / &quot;&lt;&lt;maxlife&lt;&lt;endl;
	cout&lt;&lt;&quot;mana: &quot;&lt;&lt;mana&lt;&lt;&quot; / &quot;&lt;&lt;maxmana&lt;&lt;endl;
	cout&lt;&lt;&quot;defence: &quot;&lt;&lt;defence&lt;&lt;endl;
	cout&lt;&lt;&quot;damage: &quot;&lt;&lt;dmg&lt;&lt;endl;
}
</code></pre>
<p>main.cpp</p>
<pre><code>//main.cpp
#include &quot;fighter.cpp&quot;

int main()
{
	Fighter Cloud,Leon;
	Cloud.init(&quot;Cloud&quot;,1000,100,50,300);
	Leon.init(&quot;Leon&quot;,2000,100,10,165);
	Cloud.display();
	Leon.display();
	return 0;
}
</code></pre>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201824/probleme-mit-klassen-in-c-linker-will-nicht-mitmachen-visual-c-2005-express</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 05:54:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201824.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Jan 2008 13:57:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 13:57:55 GMT]]></title><description><![CDATA[<p>Hi,<br />
habe ein Problem, wollte ein bischen üben mit Klassen zu programmieren, aber irgendwie mache ich etwas falsch, oder visual C++ 2005 express spinnt total..<br />
Ich bekomme ein paar Fehler beim linken:</p>
<blockquote>
<p>------ Erstellen gestartet: Projekt: Klasse fighter, Konfiguration: Release Win32 ------<br />
Kompilieren...<br />
main.cpp<br />
fighter.cpp<br />
Code wird generiert...<br />
Verknüpfen...<br />
main.obj : error LNK2005: &quot;public: bool __thiscall Fighter::init(class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; const &amp;,int,int,int,int)&quot; (?init@Fighter@@QAE_NABV?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>i</mi><mi>c</mi><mi mathvariant="normal">_</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>g</mi><mi mathvariant="normal">@</mi><mi>D</mi><mi>U</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">basic\_string@DU?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:1.00444em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit">b</span><span class="mord mathit">a</span><span class="mord mathit">s</span><span class="mord mathit">i</span><span class="mord mathit">c</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.02778em;">D</span><span class="mord mathit" style="margin-right:0.10903em;">U</span><span class="mclose">?</span></span></span></span>char_traits@D@std@@V?$allocator@D@2@@std@@HHHH@Z) ist bereits in fighter.obj definiert.<br />
main.obj : error LNK2005: &quot;public: bool __thiscall Fighter::takeDmg(int)&quot; (?takeDmg@Fighter@@QAE_NH@Z) ist bereits in fighter.obj definiert.<br />
main.obj : error LNK2005: &quot;public: void __thiscall Fighter::heal(void)&quot; (?heal@Fighter@@QAEXXZ) ist bereits in fighter.obj definiert.<br />
main.obj : error LNK2005: &quot;public: void __thiscall Fighter::display(void)&quot; (?display@Fighter@@QAEXXZ) ist bereits in fighter.obj definiert.<br />
F:\VisualC++\projects\Klasse fighter\Release\Klasse fighter.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.<br />
Das Buildprotokoll wurde unter &quot;file://f:\VisualC++\projects\Klasse fighter\Klasse fighter\Release\BuildLog.htm&quot; gespeichert.<br />
Klasse fighter - 5 Fehler, 0 Warnung(en)<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========</p>
</blockquote>
<p>In meinem Code kann ich jedenfalls keine Fehler finden, mMn. müsste das eigentlich funktionieren...<br />
hier mal mein Code, wäre nett wenn es jemand versuchen könnte zu kompilieren.</p>
<p>fighter.h</p>
<pre><code>//fighter.h
#ifndef _FIGHTER_
#define _FIGHTER_
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class Fighter
{
private:
	int life;
	int maxlife;
	int mana;
	int maxmana;
	int defence;
	int dmg;
	string name;

public:
	bool init(const string&amp;,int,int,int,int);
	bool takeDmg(int);
	void display();
	void heal();
};
#endif
</code></pre>
<p>fighter.cpp</p>
<pre><code>//fighter.cpp
#include &lt;iostream&gt;
#include &quot;fighter.h&quot;
using namespace std;

bool Fighter::init(const string&amp; i_name,int	i_maxlife,int i_maxmana,int i_defence,int i_dmg)
{
	if(i_name.size() &lt; 1)
		return false;
	name = i_name;
	maxlife = i_maxlife;
	maxmana = i_maxmana;
	life = maxlife;
	mana = maxmana;
	defence = i_defence;
	dmg = i_dmg;
	return true;
}

bool Fighter::takeDmg(int a)
{
	a = a - defence;
	if(a&lt;0)
		a=0;
	life = life - a;
	if(life&lt;=0)
		return false;
	return true;
}

void Fighter::heal()
{
	life = maxlife;
	mana = maxmana;
}

void Fighter::display()
{
	cout&lt;&lt;&quot;name: &quot;&lt;&lt;name&lt;&lt;endl;
	cout&lt;&lt;&quot;life: &quot;&lt;&lt;life&lt;&lt;&quot; / &quot;&lt;&lt;maxlife&lt;&lt;endl;
	cout&lt;&lt;&quot;mana: &quot;&lt;&lt;mana&lt;&lt;&quot; / &quot;&lt;&lt;maxmana&lt;&lt;endl;
	cout&lt;&lt;&quot;defence: &quot;&lt;&lt;defence&lt;&lt;endl;
	cout&lt;&lt;&quot;damage: &quot;&lt;&lt;dmg&lt;&lt;endl;
}
</code></pre>
<p>main.cpp</p>
<pre><code>//main.cpp
#include &quot;fighter.cpp&quot;

int main()
{
	Fighter Cloud,Leon;
	Cloud.init(&quot;Cloud&quot;,1000,100,50,300);
	Leon.init(&quot;Leon&quot;,2000,100,10,165);
	Cloud.display();
	Leon.display();
	return 0;
}
</code></pre>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430620</guid><dc:creator><![CDATA[Sabjosu]]></dc:creator><pubDate>Fri, 04 Jan 2008 13:57:55 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 14:16:03 GMT]]></title><description><![CDATA[<p>Sabjosu schrieb:</p>
<blockquote>
<p>...</p>
<blockquote>
<p>...<br />
main.obj : error LNK2005: .... ist bereits in fighter.obj definiert.<br />
...</p>
</blockquote>
</blockquote>
<p>Recht hat er:</p>
<p>Sabjosu schrieb:</p>
<blockquote>
<p>...</p>
<pre><code>//main.cpp
#include &quot;fighter.cpp&quot;
...
</code></pre>
</blockquote>
<p>Da meintest Du bestimmt &quot;...hpp&quot;</p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S. CPP-Tags sind für uns deutlich einfacher zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430629</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 04 Jan 2008 14:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 14:36:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// fighter.hpp
#ifndef FIGHTER_HPP__INCLUDED
#define FIGHTER_HPP__INCLUDED

#include &lt;string&gt;
#include &lt;utility&gt;
#include &lt;iostream&gt;

// using namespace std; nie im Header

class Fighter
{
    std::pair &lt;unsigned int, unsigned int&gt; m_life;
    std::pair &lt;unsigned int, unsigned int&gt; m_mana;
    unsigned int m_defence;
    unsigned int m_demage;
    std::string m_name;

public:
    Fighter(std::string const&amp; name, unsigned max_life, unsigned int max_mana, unsigned int defence, unsinged int demage)
        : m_name(name), m_life(std::make_pair(max_life, max_life)), m_mana(std::make_pair(max_mana, max_mana)), m_defence(defence), m_demage(demage)
    {} 

    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, Fighter const&amp; data)
    { return (out &lt;&lt; &quot;name: &quot; &lt;&lt; data.m_name &lt;&lt; &quot;\nlife: &quot; &lt;&lt; data.m_life.first &lt;&lt; &quot; / &quot; &lt;&lt; data.m_life.second &lt;&lt; &quot;\nmana: &quot; &lt;&lt; data.m_mana.first &lt;&lt; &quot; / &quot; &lt;&lt; data.m_mana.second &lt;&lt; &quot;\ndefence: &quot; &lt;&lt; data.m_defence &lt;&lt; &quot;\ndamage: &quot; &lt;&lt; m_demage); }

public:
    bool take_demage(unsigned int);
    void heal();
};

#endif // FIGHTER_HPP__INCLUDED
</code></pre>
<pre><code class="language-cpp">// fighter.cpp
#include &quot;fighter.hpp&quot;

bool Fighter::take_demage(const unsigned int demage)
{
    const int value(demage - m_defence);
    if (value &lt;= 0 &amp;&amp; m_life.first) return true;

    m_life.first -= value;
    return m_life.first != 0;    
}

void Fighter::heal()
{
    m_life.first = m_life.second;
    m_mana.first = m_mana.second;
}
</code></pre>
<pre><code class="language-cpp">// main.cpp
#include &quot;fighter.hpp&quot;
#include &lt;iostream&gt;

int main()
{
    Fighter cloud(&quot;Cloud&quot;, 1000, 100, 50, 300);
    Fighter leon(&quot;Leon&quot;, 2000, 100, 10, 165);
    std::cout &lt;&lt; cloud &lt;&lt; &quot;\n&quot; &lt;&lt; leon &lt;&lt; std::endl;
}
</code></pre>
<p>und schon ist es ordentlich <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/1430646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430646</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 04 Jan 2008 14:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 14:38:07 GMT]]></title><description><![CDATA[<p>Übrigens: die 'init'-Methode ist unsinnig. Für sowas gibt es in C++ Konstruktoren. Erstell also statt der Methode einen geeigneten Konstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430649</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 04 Jan 2008 14:38:07 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 15:12:00 GMT]]></title><description><![CDATA[<p>Danke, musste wirklich die fighter.hpp und nicht die fighter.cpp includen.<br />
@(D)evil und Konrad Rudolph:<br />
thx für die tipps, habe aber gerade erst mit Klassen angefangen und will nichts überspringen (alles der Reihe nach, wie es im schlauen Buch steht *g*)<br />
@(D)evil warum eigentlich kein &quot;using namespace std;&quot; in einem Header?<br />
In meinem Buch benutzt der Autor nähmlich auch using namespace std in Header.<br />
(&quot;C++ Lernen und professionell anwenden&quot;, ich hoffe ich habe nichts falsches gekauft.^^)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430664</guid><dc:creator><![CDATA[Sabjosu]]></dc:creator><pubDate>Fri, 04 Jan 2008 15:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 15:13:25 GMT]]></title><description><![CDATA[<p>Such mal danach hier im Forum <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="😉"
    /> Dadurch dass das im Header steht, gilt das ja auch für die Dateien, die den Header einbinden ... (so als Tipp) und dann guck dir mal an, wofür Namensräume eigtl. da sind <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/1430665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430665</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 04 Jan 2008 15:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 15:27:31 GMT]]></title><description><![CDATA[<p>Sabjosu schrieb:</p>
<blockquote>
<p>(&quot;C++ Lernen und professionell anwenden&quot;, ich hoffe ich habe nichts falsches gekauft.^^)</p>
</blockquote>
<p>Doch, da hast Du leider offensichtlich etwas Falsches gekauft. Das Buch ist Müll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430674</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 04 Jan 2008 15:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to probleme mit klassen in C++, Linker will nicht mitmachen (visual C++ 2005 express) on Fri, 04 Jan 2008 16:04:08 GMT]]></title><description><![CDATA[<p>Tja, gibt leider viele schlechte Bücher. <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="😞"
    /> Aber wenn mann sich hier im Forum rumtreibt, kann man aber das ganze wieder ausgleichen. Vieles wird einem hier richtig gestellt... wie man an diesem Thread hier sieht. <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="🙂"
    /> Wobei es auch viele Threads gibt, wo viel Mist erzählt wird. <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/1430691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430691</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 04 Jan 2008 16:04:08 GMT</pubDate></item></channel></rss>