<?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[&amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p><strong>//Edit: ganzer Source und alle Fehler unten</strong></p>
<p>Ich bin auf ein seltsames Verhalten gestossen:<br />
In meinem Projekt existieren viele Klassen, alle lassen sich mühelos kompilieren und linken.<br />
Eine bestimmte Klasse macht nun aber Probleme:</p>
<pre><code class="language-cpp">#pragma once
//BBPositionInterface.h
#include &quot;bbposition.h&quot;

class BBPositionInterface
{
public:
	//...
	inline void SetPosition(BBVector &amp;p);
	//...
};
</code></pre>
<pre><code class="language-cpp">//BBPositionInterface.cpp
#include &quot;BBPositionInterface.h&quot;

//...
void BBPositionInterface::SetPosition(BBVector &amp;p)
{
	m_pPosition-&gt;SetPosition(p);
}
//...
</code></pre>
<p>Wird SetPosition in einer Klasse aufgerufen, die von der Interface-Klasse erbt, etwa</p>
<pre><code class="language-cpp">//BBGObject : public BBPositionInterface
//BBGText : public BBGObject

void BBGText::SetPosition(BBVector &amp;position)
{
	BBGObject::SetPosition(position);
//...
}
</code></pre>
<p>ergibt das</p>
<pre><code>1&gt;BBGText.obj : error LNK2019: unresolved external symbol &quot;public: void __thiscall BBPositionInterface::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBPositionInterface@@QAEXAAVBBVector@@@Z) referenced in function &quot;public: void __thiscall BBGText::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBGText@@QAEXAAVBBVector@@@Z)
</code></pre>
<p>Klassen, welche bloss erben, ohne die vererbten Methoden anzusprechen, generieren</p>
<pre><code>1&gt;BBPObject.obj : error LNK2001: unresolved external symbol &quot;public: void __thiscall BBPositionInterface::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBPositionInterface@@QAEXAAVBBVector@@@Z)
</code></pre>
<p>Das Problem scheint irgendwo in der &quot;Verlinkung&quot; von .cpp und .h zu liegen, wenn ich den Funktionsrumpf in die .h integriere, verschwindet der Fehler.</p>
<p>Ich Benutze VC++ 2008.<br />
Die Vorschläge der MSDN-Hilfe zu LNK2001 und LNK2019 sowie Google brachten nicht viel. Ich bin langsam mit meinem Latein bzw. C++ am Ende. Überseh' ich was grundlegendes?</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237424/quot-unresolved-external-symbol-quot-bei-bestimmter-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:22:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237424.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Mar 2009 17:29:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 10:34:31 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p><strong>//Edit: ganzer Source und alle Fehler unten</strong></p>
<p>Ich bin auf ein seltsames Verhalten gestossen:<br />
In meinem Projekt existieren viele Klassen, alle lassen sich mühelos kompilieren und linken.<br />
Eine bestimmte Klasse macht nun aber Probleme:</p>
<pre><code class="language-cpp">#pragma once
//BBPositionInterface.h
#include &quot;bbposition.h&quot;

class BBPositionInterface
{
public:
	//...
	inline void SetPosition(BBVector &amp;p);
	//...
};
</code></pre>
<pre><code class="language-cpp">//BBPositionInterface.cpp
#include &quot;BBPositionInterface.h&quot;

//...
void BBPositionInterface::SetPosition(BBVector &amp;p)
{
	m_pPosition-&gt;SetPosition(p);
}
//...
</code></pre>
<p>Wird SetPosition in einer Klasse aufgerufen, die von der Interface-Klasse erbt, etwa</p>
<pre><code class="language-cpp">//BBGObject : public BBPositionInterface
//BBGText : public BBGObject

void BBGText::SetPosition(BBVector &amp;position)
{
	BBGObject::SetPosition(position);
//...
}
</code></pre>
<p>ergibt das</p>
<pre><code>1&gt;BBGText.obj : error LNK2019: unresolved external symbol &quot;public: void __thiscall BBPositionInterface::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBPositionInterface@@QAEXAAVBBVector@@@Z) referenced in function &quot;public: void __thiscall BBGText::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBGText@@QAEXAAVBBVector@@@Z)
</code></pre>
<p>Klassen, welche bloss erben, ohne die vererbten Methoden anzusprechen, generieren</p>
<pre><code>1&gt;BBPObject.obj : error LNK2001: unresolved external symbol &quot;public: void __thiscall BBPositionInterface::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBPositionInterface@@QAEXAAVBBVector@@@Z)
</code></pre>
<p>Das Problem scheint irgendwo in der &quot;Verlinkung&quot; von .cpp und .h zu liegen, wenn ich den Funktionsrumpf in die .h integriere, verschwindet der Fehler.</p>
<p>Ich Benutze VC++ 2008.<br />
Die Vorschläge der MSDN-Hilfe zu LNK2001 und LNK2019 sowie Google brachten nicht viel. Ich bin langsam mit meinem Latein bzw. C++ am Ende. Überseh' ich was grundlegendes?</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687559</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Sat, 11 Apr 2009 10:34:31 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 28 Mar 2009 17:40:02 GMT]]></title><description><![CDATA[<p>Nimm das inline mal weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687566</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 28 Mar 2009 17:40:02 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 28 Mar 2009 17:54:21 GMT]]></title><description><![CDATA[<p>Hab ich schon versucht, danke. Hilft leider nicht.<br />
Löschen des Debug-Ordners und neukompilieren führt übrigens zum gleichen Resultat wie eingangs beschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687574</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Sat, 28 Mar 2009 17:54:21 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 10:33:41 GMT]]></title><description><![CDATA[<p>Ich erlaub mir mal, das zu pushen...</p>
<p>Meine Suche hat immer noch nichts ergeben, mittlerweile kenne ich sogar die Linker-Optionen ^^</p>
<p>Falls es hilft, hier mal der komplette Code der betreffenden Klasse:</p>
<p>BBPositionInterface.h</p>
<pre><code class="language-cpp">/*
Interface für BBPosition. Sollte von allen Klassen implementiert werden, die eine BBPosition verwenden.
*/

#pragma once
#include &quot;BBPosition.h&quot;

class BBPositionInterface
{
public:
	BBPositionInterface(void);
	BBPositionInterface(BBPosition *p);
	virtual ~BBPositionInterface(void);

	inline void SetPosition(BBVector &amp;p);
	inline void SetVelocity(BBVector &amp;m);
	inline void SetAcceleration(BBVector &amp;a);

	inline BBVector GetPosition();
	inline BBVector GetVelocity();
	inline BBVector GetAcceleration();

	inline void Move(BBVector &amp;m);

protected:
	BBPosition *m_pPosition;
};
</code></pre>
<p>BBPositionInterface.cpp</p>
<pre><code class="language-cpp">#include &quot;BBPositionInterface.h&quot;

BBPositionInterface::BBPositionInterface(void)
{
	m_pPosition = new BBPosition();
}

BBPositionInterface::BBPositionInterface(BBPosition *p)
{
	m_pPosition = p;
	p-&gt;Attach();
}

BBPositionInterface::~BBPositionInterface(void)
{
	m_pPosition-&gt;Detach();
}

void BBPositionInterface::SetPosition(BBVector &amp;p)
{
	m_pPosition-&gt;SetPosition(p);
}

void BBPositionInterface::SetVelocity(BBVector &amp;v)
{
	m_pPosition-&gt;SetVelocity(v);
}

void BBPositionInterface::SetAcceleration(BBVector &amp;a)
{
	m_pPosition-&gt;SetAcceleration(a);
}

void BBPositionInterface::Move(BBVector &amp;m)
{
	m_pPosition-&gt;Move(m);
}

BBVector BBPositionInterface::GetPosition()
{
	return m_pPosition-&gt;GetPosition();
}

BBVector BBPositionInterface::GetVelocity()
{
	return m_pPosition-&gt;GetVelocity();
}

BBVector BBPositionInterface::GetAcceleration()
{
	return m_pPosition-&gt;GetAcceleration();
}
</code></pre>
<p>sowie alle Fehler</p>
<pre><code>1&gt;BBGSprite.obj : error LNK2019: unresolved external symbol &quot;public: class BBVector __thiscall BBPositionInterface::GetPosition(void)&quot; (?GetPosition@BBPositionInterface@@QAE?AVBBVector@@XZ) referenced in function &quot;public: virtual void __thiscall BBGSprite::Draw(void)&quot; (?Draw@BBGSprite@@UAEXXZ)
1&gt;BBPObject.obj : error LNK2001: unresolved external symbol &quot;public: class BBVector __thiscall BBPositionInterface::GetPosition(void)&quot; (?GetPosition@BBPositionInterface@@QAE?AVBBVector@@XZ)
1&gt;BBGText.obj : error LNK2019: unresolved external symbol &quot;public: void __thiscall BBPositionInterface::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBPositionInterface@@QAEXAAVBBVector@@@Z) referenced in function &quot;public: void __thiscall BBGText::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBGText@@QAEXAAVBBVector@@@Z)
1&gt;BBPObject.obj : error LNK2001: unresolved external symbol &quot;public: void __thiscall BBPositionInterface::SetPosition(class BBVector &amp;)&quot; (?SetPosition@BBPositionInterface@@QAEXAAVBBVector@@@Z)
1&gt;BBPObject.obj : error LNK2019: unresolved external symbol &quot;public: void __thiscall BBPositionInterface::SetVelocity(class BBVector &amp;)&quot; (?SetVelocity@BBPositionInterface@@QAEXAAVBBVector@@@Z) referenced in function &quot;public: class BBVector __thiscall BBPObject::Advance(float)&quot; (?Advance@BBPObject@@QAE?AVBBVector@@M@Z)
1&gt;BBPObject.obj : error LNK2019: unresolved external symbol &quot;public: class BBVector __thiscall BBPositionInterface::GetVelocity(void)&quot; (?GetVelocity@BBPositionInterface@@QAE?AVBBVector@@XZ) referenced in function &quot;public: class BBVector __thiscall BBPObject::Advance(float)&quot; (?Advance@BBPObject@@QAE?AVBBVector@@M@Z)
1&gt;BBPObject.obj : error LNK2019: unresolved external symbol &quot;public: class BBVector __thiscall BBPositionInterface::GetAcceleration(void)&quot; (?GetAcceleration@BBPositionInterface@@QAE?AVBBVector@@XZ) referenced in function &quot;public: class BBVector __thiscall BBPObject::Advance(float)&quot; (?Advance@BBPObject@@QAE?AVBBVector@@M@Z)
</code></pre>
<p>Ich hoffe, jemand von euch entdeckt den Haken, das Problem beschäftigt mich schon lange <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>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694336</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Sat, 11 Apr 2009 10:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 10:42:03 GMT]]></title><description><![CDATA[<p>Hast Du BBPositionInterface.cpp auch wirklich kompiliert?<br />
Will heissen, ist es im Make oder Projekt oder wo auch immer es kompiliert wird angegeben?</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694341</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 11 Apr 2009 10:42:03 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 17:56:25 GMT]]></title><description><![CDATA[<p>Ja.<br />
Ich arbeite mit VS2008, im Build-Log wird explizit angegeben, dass die Datei kompiliert wird. Ein entsprechendes .obj ist auch vorhanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694557</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Sat, 11 Apr 2009 17:56:25 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 18:24:11 GMT]]></title><description><![CDATA[<p>Ich bin mir nicht sicher, aber könnte es an dem inline liegen? Versuch doch mal ob es ohne inline tut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694571</guid><dc:creator><![CDATA[SWW13]]></dc:creator><pubDate>Sat, 11 Apr 2009 18:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 21:21:06 GMT]]></title><description><![CDATA[<p>Leider bereits erfolglos versucht <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/1694620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694620</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Sat, 11 Apr 2009 21:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 21:38:57 GMT]]></title><description><![CDATA[<p>Verschiebe doch mal die ge'inlineten Funktionen von der *.cpp in die *.h.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694625</guid><dc:creator><![CDATA[vielleicht...]]></dc:creator><pubDate>Sat, 11 Apr 2009 21:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 21:43:18 GMT]]></title><description><![CDATA[<p>das_brot schrieb:</p>
<blockquote>
<p>Das Problem scheint irgendwo in der &quot;Verlinkung&quot; von .cpp und .h zu liegen, wenn ich den Funktionsrumpf in die .h integriere, verschwindet der Fehler.</p>
</blockquote>
<p>Klappt so, aber das wäre sehr unschön.<br />
Seltsam ist: im restlichen Projekt funktionieren ausgelagerte Funktionsrümpfe (auch inline-Funktionen)...</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694628</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Sat, 11 Apr 2009 21:43:18 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 21:52:11 GMT]]></title><description><![CDATA[<p>Um mit dem Ratespiel mal fortzufahren...</p>
<p>Du definierst ein Interface (eigentlich eine voll funktionsfähige Klasse). Die Methode SetPosition(...) wird von dir ebenfalls definiert.</p>
<p>In deiner abgeleiteten definierst du diese Methode neu, ohne eine Funktionalität zu ändern. Lasse diese Überladung einfach mal aus, da diese faktisch überflüssig ist. Solltest du das Verhalten bei SetPosition (bei gleicher Signatur) in der abgeleiteten Klasse ändern, deklariere die Methode in der Basisklasse als virtuell (ebenso den Destruktor).</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694633</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Sat, 11 Apr 2009 21:52:11 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sat, 11 Apr 2009 21:52:38 GMT]]></title><description><![CDATA[<p>das_brot schrieb:</p>
<blockquote>
<p>das_brot schrieb:</p>
<blockquote>
<p>Das Problem scheint irgendwo in der &quot;Verlinkung&quot; von .cpp und .h zu liegen, wenn ich den Funktionsrumpf in die .h integriere, verschwindet der Fehler.</p>
</blockquote>
<p>Klappt so, aber das wäre sehr unschön.<br />
Seltsam ist: im restlichen Projekt funktionieren ausgelagerte Funktionsrümpfe (auch inline-Funktionen)...</p>
<p>Gruss</p>
</blockquote>
<p>Oh, sorry, habe ich überlesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Ich wüsste allerdings auch nicht, wie man inline in *.cpp Dateien verwenden soll, da das m.M.n. dem inline völlig zuwider liegt. inline wird ja vom Compiler &quot;genutzt&quot;, *.cpp Dateien werden aber vom Linker zu einer Einheit verarbeitet.</p>
<p>Mach dir das so klar:<br />
Stell dir vor, du hast eine Drittanbieter Lib. mit Headern und vorkompilierten *.lib Dateien. D.h. du kennst die interne Implementation nicht, da du die *.cpps nicht kennst. Jetzt steht in einer Header-Datei:<br />
inline int getBla();<br />
Da inline vom Compiler verarbeitet wird, findet dieser allerdings die Funktion nicht im Code, um den Aufruf zu inlinen. Also gibt's 'ne tolle Fehlermeldung.</p>
<p>----</p>
<p>Ich bin nicht unglaublich bewandert in dem Thema und es mag sein, dass ich den totalen Bullshit rede, falls dem so ist: Bitte aufklären <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/1694634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694634</guid><dc:creator><![CDATA[vielleicht...]]></dc:creator><pubDate>Sat, 11 Apr 2009 21:52:38 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;unresolved external symbol&amp;quot; bei bestimmter Klasse on Sun, 12 Apr 2009 08:54:57 GMT]]></title><description><![CDATA[<p>Heiko:</p>
<p>Danke, das funktioniert so. Seltsamerweise muss ich aber alle inline-Funktionen als virtual definieren, auch wenn diese in keiner erbenden Klasse verändert werden. Ansonsten hagelts die Linker-Errors.</p>
<p>Weiss jemand, warum das so ist? Mein Verständnis von virtual ist, dass ich es nur brauche, wenn die abgeleitete Klasse die Methode überschreiben können soll...</p>
<p>vielleicht:<br />
Ich denke mir, der Code aus der .lib wird einfach dupliziert, falls im Header inline angegeben ist, anstatt ihn nur einmal zentral im .exe abzulegen.<br />
Aber auch ich bin da nicht so bewandert ^^</p>
<p>Gruss und Danke für die rege Mithilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694685</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Sun, 12 Apr 2009 08:54:57 GMT</pubDate></item></channel></rss>