<?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 eigenem Header [beantwortet]]]></title><description><![CDATA[<p>Hallo!</p>
<p>Diesmal habe ich mich daran versucht einen eignen Header zu schreiben, indem auch Templates vorkommen. Aber bei der Klasse Vector bekomme ich Probleme und weiß nicht, wie ich es anstellen soll.</p>
<p>Mein Header sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">//qsort.h
template&lt;class T&gt;
void tausche(T&amp; a, T&amp; b) ;
template &lt;class T&gt;
bool kleiner(const T&amp; a, const T&amp; b) ;
template &lt;class T&gt;
void drucke(const vector&lt;T&gt; &amp; V);
template &lt;class T&gt;
void quicksort(vector &lt;T&gt; &amp; a, int links, int rechts);
</code></pre>
<p>Dazu</p>
<pre><code class="language-cpp">// qsort.cpp
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cstddef&gt;
#include &quot;qsort.h&quot;
using namespace std;

template&lt;class T&gt;
void tausche(T&amp; a, T&amp; b)    {
    // a und b vertauschen
    const T TEMP = a;
    a = b;
    b = TEMP;
}

/*  Die folgende Funktion würde auch mit der Parameterliste (T a, T b) arbeiten, dh. die entsprechenden
    Werte kopieren. Da T aber ein bel. Datentyp sein kann, wird eine Referenz beforzugt um Kopien von möglicherweise
    sehr großen Objekten zu vermeiden.
*/

template &lt;class T&gt;
bool kleiner(const T&amp; a, const T&amp; b)    {   //Vergleich mittels '&lt;', was nicht bei allen Datentypen wohldefiniert ist.
    return a &lt; b;                           //Der Vergleich wird in eine extra Funktion verlagert um spätere Änderungen zu vereinfachen.
}

template &lt;class T&gt;
void drucke(const vector&lt;T&gt; &amp; V)    {
    for(size_t i = 0; i &lt; V.size(); i++)
        cout &lt;&lt; V[i] &lt;&lt; ' ';
    cout &lt;&lt; endl;
}

template &lt;class T&gt;
void quicksort(vector &lt;T&gt; &amp; a, int links, int rechts)   {
    int li = links,
        re = rechts;

    T el = a[(links + rechts)/2];
    do  {
        while(kleiner(a[li],el)) ++li;
        while(kleiner(el, a[re])) --re;
        if(li &lt; re) tausche(a[li], a[re]);
        if(li &lt;= re) {++li; --re;}
    } while(li &lt;= re);

    if(links &lt; re) quicksort(a, links, re);
    if(li &lt; rechts) quicksort(a, li, rechts);
}
</code></pre>
<p>Leider bekomme ich beim Kompilieren u.a. die Meldung, dass ich keine Vektoren ohne Typ anlegen darf. Wie kann ich das sonst machen, wenn ich mich auf keinen Typ festlegen will?</p>
<p>Und kennt jemand einen guten Link mit Erklärung zu eigenen Headerdateien etc.? Mit meinem Buch alleine komme ich nicht weiter und vergoogelt hab ich mich auch schon.</p>
<p>Danke sehr auf jeden Fall schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273350/probleme-mit-eigenem-header-beantwortet</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 05:12:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273350.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 05 Sep 2010 16:25:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit eigenem Header [beantwortet] on Mon, 06 Sep 2010 15:35:41 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Diesmal habe ich mich daran versucht einen eignen Header zu schreiben, indem auch Templates vorkommen. Aber bei der Klasse Vector bekomme ich Probleme und weiß nicht, wie ich es anstellen soll.</p>
<p>Mein Header sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">//qsort.h
template&lt;class T&gt;
void tausche(T&amp; a, T&amp; b) ;
template &lt;class T&gt;
bool kleiner(const T&amp; a, const T&amp; b) ;
template &lt;class T&gt;
void drucke(const vector&lt;T&gt; &amp; V);
template &lt;class T&gt;
void quicksort(vector &lt;T&gt; &amp; a, int links, int rechts);
</code></pre>
<p>Dazu</p>
<pre><code class="language-cpp">// qsort.cpp
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cstddef&gt;
#include &quot;qsort.h&quot;
using namespace std;

template&lt;class T&gt;
void tausche(T&amp; a, T&amp; b)    {
    // a und b vertauschen
    const T TEMP = a;
    a = b;
    b = TEMP;
}

/*  Die folgende Funktion würde auch mit der Parameterliste (T a, T b) arbeiten, dh. die entsprechenden
    Werte kopieren. Da T aber ein bel. Datentyp sein kann, wird eine Referenz beforzugt um Kopien von möglicherweise
    sehr großen Objekten zu vermeiden.
*/

template &lt;class T&gt;
bool kleiner(const T&amp; a, const T&amp; b)    {   //Vergleich mittels '&lt;', was nicht bei allen Datentypen wohldefiniert ist.
    return a &lt; b;                           //Der Vergleich wird in eine extra Funktion verlagert um spätere Änderungen zu vereinfachen.
}

template &lt;class T&gt;
void drucke(const vector&lt;T&gt; &amp; V)    {
    for(size_t i = 0; i &lt; V.size(); i++)
        cout &lt;&lt; V[i] &lt;&lt; ' ';
    cout &lt;&lt; endl;
}

template &lt;class T&gt;
void quicksort(vector &lt;T&gt; &amp; a, int links, int rechts)   {
    int li = links,
        re = rechts;

    T el = a[(links + rechts)/2];
    do  {
        while(kleiner(a[li],el)) ++li;
        while(kleiner(el, a[re])) --re;
        if(li &lt; re) tausche(a[li], a[re]);
        if(li &lt;= re) {++li; --re;}
    } while(li &lt;= re);

    if(links &lt; re) quicksort(a, links, re);
    if(li &lt; rechts) quicksort(a, li, rechts);
}
</code></pre>
<p>Leider bekomme ich beim Kompilieren u.a. die Meldung, dass ich keine Vektoren ohne Typ anlegen darf. Wie kann ich das sonst machen, wenn ich mich auf keinen Typ festlegen will?</p>
<p>Und kennt jemand einen guten Link mit Erklärung zu eigenen Headerdateien etc.? Mit meinem Buch alleine komme ich nicht weiter und vergoogelt hab ich mich auch schon.</p>
<p>Danke sehr auf jeden Fall schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1948515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1948515</guid><dc:creator><![CDATA[Tonikum]]></dc:creator><pubDate>Mon, 06 Sep 2010 15:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit eigenem Header [beantwortet] on Sun, 05 Sep 2010 17:17:33 GMT]]></title><description><![CDATA[<p>Du musst bei templates Deklaration und Definition der Methoden im Header unterbringen. Also alles was in der qsort.cpp steht in die qsort.h verfrachten. Entweder gleich rüberkopieren, oder am Ende includieren, dann aber die Datei von .cpp in .impl oder .inl oder was auch immer umbenennen.<br />
Außerdem fehlt mir noch ein include-guard in deinem Header.</p>
<p>// edit:<br />
Wusst ich doch dass dazu was in der FAQ hier steht:<br />
<a href="http://c-plusplus.net/forum/viewtopic-var-t-is-151578.html" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-t-is-151578.html</a><br />
Punkt 5</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1948538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1948538</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sun, 05 Sep 2010 17:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit eigenem Header [beantwortet] on Mon, 06 Sep 2010 15:35:12 GMT]]></title><description><![CDATA[<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1948868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1948868</guid><dc:creator><![CDATA[Tonikum]]></dc:creator><pubDate>Mon, 06 Sep 2010 15:35:12 GMT</pubDate></item></channel></rss>