<?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[Linker Error]]></title><description><![CDATA[<p>Hallo!<br />
Ich kann mir gerade das Verhalten meines Linkers nicht erklären. Der Aufbau ist so:</p>
<p>header.hpp (enthält Deklarationen und Klassendefinitionen, includiert impl.hpp ganz am Ende)<br />
impl.hpp (enthält Implementierungen von Templates)</p>
<p>impl.cpp (includiert header.hpp, enthält Implementierung der Deklarationen aus header.hpp)<br />
main.cpp (includiert header.hpp, nutzt die Klassen aus header.hpp)</p>
<p>Nun befindet sich in header.hpp etwa sowas:</p>
<pre><code class="language-cpp">class X {
public:
   inline unsigned get() const;
private:
   unsigned res_;
};
</code></pre>
<p>Und in impl.cpp dann</p>
<pre><code class="language-cpp">unsigned X::get() const {
    return res_;
}
</code></pre>
<p>Ist alles spitze. Sobald ich nun jedoch X::get() in impl.hpp (dort, wo Templates definiert werden) oder auch in main.cpp aufrufe, gibt's Linker-Errors. Sie verschwinden, wenn ich in impl.cpp die get() einmal aufrufe, also kompiliert er sie anscheinend gar nicht, wenn ich sie nicht in impl.cpp aufrufe. Aber wieso? Ich möchte get() eigentlich gar nicht in impl.cpp aufrufen.</p>
<p>Dass Funktionen nicht kompiliert werden, wenn man sie in der Übersetzungseinheit nicht braucht, kenne ich nur von Templates, aber von normalen Memberfunktionen?</p>
<p>Ich bin ratlos. <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/271650/linker-error</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 07:14:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271650.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Aug 2010 17:38:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 18:21:20 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich kann mir gerade das Verhalten meines Linkers nicht erklären. Der Aufbau ist so:</p>
<p>header.hpp (enthält Deklarationen und Klassendefinitionen, includiert impl.hpp ganz am Ende)<br />
impl.hpp (enthält Implementierungen von Templates)</p>
<p>impl.cpp (includiert header.hpp, enthält Implementierung der Deklarationen aus header.hpp)<br />
main.cpp (includiert header.hpp, nutzt die Klassen aus header.hpp)</p>
<p>Nun befindet sich in header.hpp etwa sowas:</p>
<pre><code class="language-cpp">class X {
public:
   inline unsigned get() const;
private:
   unsigned res_;
};
</code></pre>
<p>Und in impl.cpp dann</p>
<pre><code class="language-cpp">unsigned X::get() const {
    return res_;
}
</code></pre>
<p>Ist alles spitze. Sobald ich nun jedoch X::get() in impl.hpp (dort, wo Templates definiert werden) oder auch in main.cpp aufrufe, gibt's Linker-Errors. Sie verschwinden, wenn ich in impl.cpp die get() einmal aufrufe, also kompiliert er sie anscheinend gar nicht, wenn ich sie nicht in impl.cpp aufrufe. Aber wieso? Ich möchte get() eigentlich gar nicht in impl.cpp aufrufen.</p>
<p>Dass Funktionen nicht kompiliert werden, wenn man sie in der Übersetzungseinheit nicht braucht, kenne ich nur von Templates, aber von normalen Memberfunktionen?</p>
<p>Ich bin ratlos. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1934809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934809</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sun, 01 Aug 2010 18:21:20 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 18:12:14 GMT]]></title><description><![CDATA[<p>zeig mal bitte die LNK-fehlermeldungen.</p>
<p>des weiteren kannst du mal das inline in der deklaration wegmachen - bringt eh nichts.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934816</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 01 Aug 2010 18:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 18:16:39 GMT]]></title><description><![CDATA[<p>Naja, der klassiche Fehler des Linkers:</p>
<pre><code>error LNK2019: unresolved external symbol &quot;public: unsigned int __thiscall X::get(void)const &quot; (?get@X@@QBEIXZ) referenced in function &quot;main&quot; usw. -übliches kryptisches Zeug-
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1934820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934820</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sun, 01 Aug 2010 18:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 18:21:41 GMT]]></title><description><![CDATA[<p>Wenn man nur unsigned schreibt ist immer ein unsigned int gemeint?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934822</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 01 Aug 2010 18:21:41 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 18:22:53 GMT]]></title><description><![CDATA[<p>Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934823</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sun, 01 Aug 2010 18:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 18:53:22 GMT]]></title><description><![CDATA[<p>Vielleicht liegts am inline <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1934833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934833</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Sun, 01 Aug 2010 18:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 19:29:16 GMT]]></title><description><![CDATA[<p>Ist auch schon weg. Optimiert der da irgendwas rum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934853</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sun, 01 Aug 2010 19:29:16 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 21:04:06 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<p>Ist auch schon weg. Optimiert der da irgendwas rum?</p>
</blockquote>
<p>Wenn das inline schon weg ist, muß es etwas anderes sein, das Du uns hier vorenthalten hast. Der Codeschnipsel, den Du hier zeigst, ist nämlich in Ordnung.</p>
<p>1. Ist der Code wirklich übersetzt worden?<br />
2. Was macht der Präprozessor?<br />
3. Wenn ich solche Probleme habe, prüfe ich gerne mal mit</p>
<p>#error &quot;blablabla&quot;</p>
<p>ob die Funktion auch wirklich übersetzt wird.</p>
<p>4. Ansonsten such mal nach vergessenen ;. Die verursachen auch gerne mal unerklärliche Fehler.</p>
<p>Viel Glück</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934885</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Sun, 01 Aug 2010 21:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Sun, 01 Aug 2010 22:21:13 GMT]]></title><description><![CDATA[<blockquote>
<p>&gt; Wenn das inline schon weg ist, muß es etwas anderes sein, das Du uns hier vorenthalten hast.</p>
</blockquote>
<p>Nun, die Funktion ist Member einer abgeleiteten Klasse mit Laufzeitpolymorphie (wobei die Funktion non-virtual ist).</p>
<blockquote>
<p>&gt; 2. Was macht der Präprozessor?</p>
</blockquote>
<p>Nur include-Guards</p>
<blockquote>
<p>&gt; 3. Wenn ich solche Probleme habe, prüfe ich gerne mal mit</p>
</blockquote>
<p>#error &quot;blablabla&quot;</p>
<p>ob die Funktion auch wirklich übersetzt wird</p>
<p>Wie soll das funktionieren? Ich weiß genau, dass die Funktionen nicht kompiliert werden, wenn sie in der Übersetzungseinheit nicht gebraucht werden. Ein nachgucken in den Objektdateien hat das bestätigt.</p>
<blockquote>
<p>&gt; 4. Ansonsten such mal nach vergessenen ;. Die verursachen auch gerne mal unerklärliche Fehler.</p>
</blockquote>
<p>Linker-Fehler? Das kommt niemals so durch 'nen Compiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934899</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sun, 01 Aug 2010 22:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Mon, 02 Aug 2010 02:24:39 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<blockquote>
<p>&gt; 3. Wenn ich solche Probleme habe, prüfe ich gerne mal mit</p>
</blockquote>
<p>#error &quot;blablabla&quot;</p>
</blockquote>
<p>du sollst irgendwo in die *.cpp #error bla schreiben - und dann wirst du vermutlich sehen, dass die cpp gar nicht erst geparst wird?!</p>
<p>evtl. baust du auch endlich mal ein minimales kompilierendes bsp., weil deine angegebenen codeschnipsel nicht diesen fehler verursachen sollten, die du schilderst...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934925</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 02 Aug 2010 02:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Linker Error on Mon, 02 Aug 2010 05:12:18 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<blockquote>
<p>&gt; 3. Wenn ich solche Probleme habe, prüfe ich gerne mal mit</p>
</blockquote>
<p>#error &quot;blablabla&quot;</p>
<p>ob die Funktion auch wirklich übersetzt wird</p>
<p>Wie soll das funktionieren? Ich weiß genau, dass die Funktionen nicht kompiliert werden, wenn sie in der Übersetzungseinheit nicht gebraucht werden. Ein nachgucken in den Objektdateien hat das bestätigt.</p>
</blockquote>
<p>Wenn Du schon weißt, daß sie nicht übersetzt werden, dann tu was dagegen.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934933</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 02 Aug 2010 05:12:18 GMT</pubDate></item></channel></rss>