<?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[inkludieren einer Klasse]]></title><description><![CDATA[<p>Hiho,</p>
<p>nach benutzung der Suche und durchlesen der FAQ wurde meine Frage leider noch nicht beantwortet, falls ich nichts übersehen habe.</p>
<p>Mein Problem erscheint den meisten von euch wohl recht simpel: ich habe die cpp Datei vector.cpp geschrieben, in der ich eine klasse</p>
<pre><code class="language-csharp">template&lt;class T&gt;
class vector {......}
</code></pre>
<p>definiert habe.</p>
<p>Passend dazu hab ich mir eine Headerdatei vector.h geschrieben, die nicht weiter enthält als:</p>
<pre><code class="language-csharp">template&lt;class T&gt;
class vector;
</code></pre>
<p>Und schlussendlich kommt die zellen.cpp datei die das ganze Programm nutzen soll</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &quot;vector.h&quot;

using namespace std;

int main()
</code></pre>
<p>usw.</p>
<p>nun, funktionnieren tuts nicht (logisch, sonst müsste ich nicht hier nachfragen) die erste der Fehlermeldungen lautet:<br />
zellen.cpp(8) : error C2079: 'zellen' uses undefined class 'vector&lt;bool&gt;'</p>
<p>Naja, erstmal habe ich mich gewundert warum das nicht geht, und für eine Erklärung hiervon wäre ich schonmal sehr dankbar.</p>
<p>Ich dachte mir dann aber, wenn er die vector-klasse so nicht findet hau ich sie halt einfach in die header datei selbst, also hopp, copy paste aus vector.cpp rein in vector.h.<br />
Das funzte dann aber auch nicht, mit folgenden 2 Fehlermeldungen:</p>
<p>Command line warning D4024 : unrecognized source file type 'vector.h', object fi<br />
le assumed<br />
zellen.cpp<br />
Microsoft (R) Incremental Linker Version 6.00.8168<br />
Copyright (C) Microsoft Corp 1992-1998. All rights reser</p>
<p>/out:zellen.exe<br />
zellen.obj<br />
vector.h<br />
vector.h : fatal error LNK1136: invalid or corrupt file</p>
<p>Ok, was mache ich bitte falsch?<br />
Vielen dank im vorraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157582/inkludieren-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 03:32:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157582.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Aug 2006 16:16:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to inkludieren einer Klasse on Sun, 27 Aug 2006 16:16:39 GMT]]></title><description><![CDATA[<p>Hiho,</p>
<p>nach benutzung der Suche und durchlesen der FAQ wurde meine Frage leider noch nicht beantwortet, falls ich nichts übersehen habe.</p>
<p>Mein Problem erscheint den meisten von euch wohl recht simpel: ich habe die cpp Datei vector.cpp geschrieben, in der ich eine klasse</p>
<pre><code class="language-csharp">template&lt;class T&gt;
class vector {......}
</code></pre>
<p>definiert habe.</p>
<p>Passend dazu hab ich mir eine Headerdatei vector.h geschrieben, die nicht weiter enthält als:</p>
<pre><code class="language-csharp">template&lt;class T&gt;
class vector;
</code></pre>
<p>Und schlussendlich kommt die zellen.cpp datei die das ganze Programm nutzen soll</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &quot;vector.h&quot;

using namespace std;

int main()
</code></pre>
<p>usw.</p>
<p>nun, funktionnieren tuts nicht (logisch, sonst müsste ich nicht hier nachfragen) die erste der Fehlermeldungen lautet:<br />
zellen.cpp(8) : error C2079: 'zellen' uses undefined class 'vector&lt;bool&gt;'</p>
<p>Naja, erstmal habe ich mich gewundert warum das nicht geht, und für eine Erklärung hiervon wäre ich schonmal sehr dankbar.</p>
<p>Ich dachte mir dann aber, wenn er die vector-klasse so nicht findet hau ich sie halt einfach in die header datei selbst, also hopp, copy paste aus vector.cpp rein in vector.h.<br />
Das funzte dann aber auch nicht, mit folgenden 2 Fehlermeldungen:</p>
<p>Command line warning D4024 : unrecognized source file type 'vector.h', object fi<br />
le assumed<br />
zellen.cpp<br />
Microsoft (R) Incremental Linker Version 6.00.8168<br />
Copyright (C) Microsoft Corp 1992-1998. All rights reser</p>
<p>/out:zellen.exe<br />
zellen.obj<br />
vector.h<br />
vector.h : fatal error LNK1136: invalid or corrupt file</p>
<p>Ok, was mache ich bitte falsch?<br />
Vielen dank im vorraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125501</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sun, 27 Aug 2006 16:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to inkludieren einer Klasse on Sun, 27 Aug 2006 16:34:41 GMT]]></title><description><![CDATA[<p>ich weis nicht genau, habe so eine schreibweise selbst noch nie benutzt, allerdings würde mir diese stelle, falls die jetzt in der &quot;zusammengehauten&quot; headerdatei vorhanden ist, verdächtig vorkommen:</p>
<pre><code class="language-cpp">class vector;
class vector{
...
};
</code></pre>
<p>weil sich da die klassendeklaration wiederholt...</p>
<p>und wozu brauchst du da eigentlich das alles:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
</code></pre>
<p>? wie siehts denn da drinne aus in der klasse? Alles, was mit template&lt;...&gt; deklariert wird, muss nähmlich gleich auch definiert werden, wenn ich mich nicht irre...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125523</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sun, 27 Aug 2006 16:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to inkludieren einer Klasse on Sun, 27 Aug 2006 16:45:17 GMT]]></title><description><![CDATA[<p>Ehm nein, die Klasse ist nicht doppelt deklariert in der jetztigen vector.h. Ich habe einfach das, was in der .h datei stand durch das ersetzt was in der .cpp datei stand.</p>
<p>Gehen tuts bei dem ganzen um die Übung ganz unten in volkards c++ kurs:<br />
<a href="http://www.volkard.de/vcppkold/this.html" rel="nofollow">http://www.volkard.de/vcppkold/this.html</a></p>
<p>Das Programm an sich ist leicht. Vorher hat man eine Klasse vector zusammengebastelt, die halt für alle möglichen Typen funktionniert. (siehe vorhergehende Lektionen im gleichen Kurs)</p>
<p>Es geht mir jetzt natürlich nicht darum, das Programm einfach zum laufen zu bringen, da könnte ich mir auch einfach das inkludieren sparen und die definition der Klasse vector in die zellen.cpp reinkopieren.</p>
<p>Nebenbei, ich vergaß zu erwähnen, dass ich den cl compiler nutze und das ganze im Augenblick ohne IDE einfach im Windows Editor (notepad) schreibe und in der MS-DOS Eingabeaufforderung kompilieren lasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125545</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sun, 27 Aug 2006 16:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to inkludieren einer Klasse on Sun, 27 Aug 2006 17:11:20 GMT]]></title><description><![CDATA[<p>Ok, dann:<br />
Zum einen gehören Header-Dateien nicht in die Compiler-Kommandozeile <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>
<p>Zum anderen reicht es <strong>nicht</strong> die Klasse nur im Header zu deklarieren um diese anderswo zu benutzen. Das klappt nichtmal bei non-Templates. Du musst schon die gesamte Klassendefinition in die vector.h packen. Bei Templates müssen auch die Definitionen aller Methoden dort hinein. Nur bei non-Templates dürfen letztere auch in der vector.cpp stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125568</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 27 Aug 2006 17:11:20 GMT</pubDate></item><item><title><![CDATA[Reply to inkludieren einer Klasse on Sun, 27 Aug 2006 17:17:55 GMT]]></title><description><![CDATA[<p>Ah, vielen Dank!</p>
<p>Stimmt, die .h datei findet er ja allein durchs inkludieren, wie dumm.</p>
<p>Jetzt läuft das Programm auch so wie es soll.</p>
<p>Wenn ich das jetzt richtig verstanden habe geht das, was ich mit Funktionen mache (nämlich sie einfach im header einmal deklarieren und in einer weiteren cpp erst richtig ausschreiben) nicht mit Klassen.</p>
<p>Dann gleich noch eine Frage: Volkard Henkel schreibt in seinem C++ Kurs, den ich ja gerade durchnehme etwas davon (recht am Anfang), dass ich die Funktionsdefinition in eine Header-Datei, die Funktion selbst aber in eine cpp Datei schreiben soll. Welchen grund hat das denn bitte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125578</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sun, 27 Aug 2006 17:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to inkludieren einer Klasse on Sun, 27 Aug 2006 17:26:27 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Wenn ich das jetzt richtig verstanden habe geht das, was ich mit Funktionen mache (nämlich sie einfach im header einmal deklarieren und in einer weiteren cpp erst richtig ausschreiben) nicht mit Klassen.</p>
</blockquote>
<p>Stimmt. Die Methoden kannst Du aber in der .h deklarieren und in der .cpp definieren, allerdings wie schon gesagt nur bei non-Templates.</p>
<pre><code class="language-cpp">// *.h
class Xyz {
  int funktion();
};

// *.cpp
int Xyz::funktion() {
  return 0;
}
</code></pre>
<blockquote>
<p>Dann gleich noch eine Frage: Volkard Henkel schreibt in seinem C++ Kurs, den ich ja gerade durchnehme etwas davon (recht am Anfang), dass ich die Funktionsdefinition in eine Header-Datei, die Funktion selbst aber in eine cpp Datei schreiben soll. Welchen grund hat das denn bitte?</p>
</blockquote>
<p>Du meinst hoffentlich in der Header-Datei deklarieren und in der cpp-Datei definieren <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="😉"
    /> Das wäre das was ich oben gezeigt habe.</p>
<p>Der Grund ist einfach: Code-Duplizierung. Durch die Inkludierung des Headers in mehrere cpp-Dateien hast Du, wenn Du die Funktion im Header ausschreibst (definierst), den Code in mehreren Objekt-Dateien. Das ist nicht nur unerwünscht, das führt dann beim Linken auch zu multiple definitions.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125586</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 27 Aug 2006 17:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to inkludieren einer Klasse on Sun, 27 Aug 2006 17:54:21 GMT]]></title><description><![CDATA[<p>Achso, vielen Dank dann gleich nochmal.</p>
<p>An solche &quot;größeren&quot; Dateien hab ich mich noch nicht herangewagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125618</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sun, 27 Aug 2006 17:54:21 GMT</pubDate></item></channel></rss>