<?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[verweis auf nicht aufgelöstes externes symbol]]></title><description><![CDATA[<p>Ich habe eine Klasse die Laufwerke verwaltet und dort eine Funktion die wiefolgt deklariert ist:</p>
<pre><code class="language-cpp">pubic:
unsigned __int64 TotalFreeSpace();
</code></pre>
<p>und so ist sie definiert:</p>
<pre><code class="language-cpp">inline unsigned __int64 Drive::TotalFreeSpace(){
	unsigned __int64 num;
	GetDiskFreeSpaceEx(cRootPath, NULL, NULL, (PULARGE_INTEGER)&amp;num); 
	return num;
}
</code></pre>
<p>Dann rufe ich das ganze so auf:</p>
<pre><code class="language-cpp">Drive drive = Drive(&quot;E:\\&quot;);	
	cout &lt;&lt; drive.TotalFreeSpace() &lt;&lt; endl;
</code></pre>
<p>Doch wieso kommt dann dieser Fehler:</p>
<pre><code>Fehler	12	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: unsigned __int64 __thiscall Drive::TotalFreeSpace(void)&quot; (?TotalFreeSpace@Drive@@QAE_KXZ)&quot; in Funktion &quot;_main&quot;.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/291897/verweis-auf-nicht-aufgelöstes-externes-symbol</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 09:29:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291897.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Aug 2011 15:02:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 15:02:10 GMT]]></title><description><![CDATA[<p>Ich habe eine Klasse die Laufwerke verwaltet und dort eine Funktion die wiefolgt deklariert ist:</p>
<pre><code class="language-cpp">pubic:
unsigned __int64 TotalFreeSpace();
</code></pre>
<p>und so ist sie definiert:</p>
<pre><code class="language-cpp">inline unsigned __int64 Drive::TotalFreeSpace(){
	unsigned __int64 num;
	GetDiskFreeSpaceEx(cRootPath, NULL, NULL, (PULARGE_INTEGER)&amp;num); 
	return num;
}
</code></pre>
<p>Dann rufe ich das ganze so auf:</p>
<pre><code class="language-cpp">Drive drive = Drive(&quot;E:\\&quot;);	
	cout &lt;&lt; drive.TotalFreeSpace() &lt;&lt; endl;
</code></pre>
<p>Doch wieso kommt dann dieser Fehler:</p>
<pre><code>Fehler	12	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: unsigned __int64 __thiscall Drive::TotalFreeSpace(void)&quot; (?TotalFreeSpace@Drive@@QAE_KXZ)&quot; in Funktion &quot;_main&quot;.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2112100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112100</guid><dc:creator><![CDATA[wieso?]]></dc:creator><pubDate>Mon, 29 Aug 2011 15:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 15:49:11 GMT]]></title><description><![CDATA[<p>In welcher Datei ist die Funktion implementiert? Warum ist sie inline?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112120</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 29 Aug 2011 15:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 16:25:10 GMT]]></title><description><![CDATA[<p>Deklariert: Drive.h<br />
Definiert: Drive.cpp</p>
<p>Aufgerufen: main.cpp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112126</guid><dc:creator><![CDATA[wieso?]]></dc:creator><pubDate>Mon, 29 Aug 2011 16:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 16:31:59 GMT]]></title><description><![CDATA[<p>Du weißt hoffentlich, was &quot;inline&quot; bedeutet. Das bedeutet, daß der Compiler den Funktionsinhalt direkt dort einsetzen darf wo die Funktion benötigt wird. Das geht aber nur, wenn er den Quelltext an der Stelle kennt (d.h. wenn sie in der selben Datei definiert wurde). So, wie du die Funktion verwenden willst, ist das inline überflüssig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112128</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Aug 2011 16:31:59 GMT</pubDate></item><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 17:02:56 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>So, wie du die Funktion verwenden willst, ist das inline überflüssig.</p>
</blockquote>
<p>Es ist sogar die Ursache des Fehlers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112135</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 29 Aug 2011 17:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 17:40:55 GMT]]></title><description><![CDATA[<p>omg danke. Das ist mein erstes Projekt in c++ davor war ich nur in c# unterwegs. Und ja ich weiß zwar, dass der compiler dann praktisch nicht die funktion aufruft sondern direkt &quot;in die zeile&quot; reinkopiert doch ansowas hab ich nicht gedacht.</p>
<p>also danke <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/2112156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112156</guid><dc:creator><![CDATA[wieso?]]></dc:creator><pubDate>Mon, 29 Aug 2011 17:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 19:38:00 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Du weißt hoffentlich, was &quot;inline&quot; bedeutet. Das bedeutet, daß der Compiler den Funktionsinhalt direkt dort einsetzen darf wo die Funktion benötigt wird.</p>
</blockquote>
<p>Das ist so nicht richtig.</p>
<p>Wichtig bei &quot;inline&quot; ist die Referenz auf die &quot;one definition rule&quot;, die in jedem schlauen C++ Buch stehen und die jeder C++ Programmierer kennen sollte. Diese Regel besagt u.a.:</p>
<ul>
<li>Eine inline-Funktion [1] darf in mehreren Übersetzungseinheiten definiert werden.</li>
<li>Wenn eine inline-Funktion in einer Übersetzungseinheit &quot;verwendet&quot; wird, <em>muss</em> sie auch in derselben ÜE definiert sein.</li>
</ul>
<p>Der Thread-Ersteller hat hier die ODR verletzt, da er eine inline-Funktion [1] in einer ÜE benutzt hat, in der die Definition nicht vorlag. Aufgrund der obigen Regeln ist es nämlich einem Compiler erlaubt, eine Definition einer inline-Funktion, die gar nicht verwendet wird, komplett zu ignorieren. Wenn also eine inline-Funktion in nur einer ÜE definiert wird, wo sie nicht mal benutzt wird, taucht sie auch nicht unbedingt in der Objektdatei auf. Deswegen findet sie der Linker auch nicht in Deinem Fall...</p>
<p>Wie diese Regeln das Inlining [2] begünstigen, kann man sich ja dann denken, ne? Inlining darf er natürlich auch bei nicht-inline-Funktionen machen. Und umgekehrt bedeutet das inline-Schlüsselwort keinen Zwang zum Inlining.</p>
<p>[1] inline-Funktion = eine Funktion, die entweder mit dem inline-Schlüsselwort deklariert wurde oder innerhalb einer struct/class-Definition definiert wurde.</p>
<p>[2] Inlining = der Compiler ersetzt einen Funktionsaufruf durch den Programmcode der Funktion selbst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2112193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112193</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 29 Aug 2011 19:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to verweis auf nicht aufgelöstes externes symbol on Mon, 29 Aug 2011 19:51:29 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Du weißt hoffentlich, was &quot;inline&quot; bedeutet. Das bedeutet, daß der Compiler den Funktionsinhalt direkt dort einsetzen darf wo die Funktion benötigt wird.</p>
</blockquote>
<p>Das ist so nicht richtig.</p>
</blockquote>
<p>Hat dir schonmal jemand gesagt, daß du deinem Namen alle Ehre machst <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2112199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2112199</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Aug 2011 19:51:29 GMT</pubDate></item></channel></rss>