<?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[Templates und operatoren überladen]]></title><description><![CDATA[<p>Hallo,<br />
Ich habe folgendes Problem: Wenn ich in meinem Programm operatoren überladen will, sträubt sich das Programm dagegen ^^<br />
Woran kann das liegen?</p>
<p>dekl</p>
<pre><code class="language-csharp">#include &lt;conio.h&gt;
#include &lt;iostream.h&gt;

template &lt;class T&gt;
class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
        };

        int Anzahl;
        Knoten *pFirst;
        Knoten *pLast;

public:
        Kset();
        //Kset(const Kset &amp;obj);
        //Kset &amp;Kset::verein(const Kset &amp;obj);
        //Kset(const int *obj, const int Array);
        ~Kset();

        void insert_front(int obj);
        //void insert_back(int obj);
        //void insert_position(int obj, int pos);
        //void delete_front();
        //void delete_back();
        //void delete_pos(int pos);
        //void view_first();
        //void view_last();
        //void view_all();
        //int view_position(int pos);
        //bool member_of_list(int obj);
        //void push_array(const int *obj, const int Array);
        //void clear_List();                  
        //int get_nachfolger(int obj);
        //int get_kleinstes_element();
        //int get_groesstes_element();
        //void get_mittelwert();
        //int get_anzahl();

        friend ostream&amp; operator &lt;&lt; (ostream&amp;, const Kset&lt;T&gt; &amp;);
        //friend istream&amp; operator &gt;&gt; (istream&amp;, const Kset&lt;T&gt; &amp;);

};

#include &quot;impl0000.hpp&quot;
</code></pre>
<p>impl</p>
<pre><code class="language-csharp">//Konstruktor///////////////////////////////////////////////////////////////////

template &lt;class T&gt;
Kset&lt;T&gt;::Kset()
{
 Anzahl = 0;
 pFirst = pLast = NULL;
}

//Dekonstruktor/////////////////////////////////////////////////////////////////

template &lt;class T&gt;
Kset&lt;T&gt;::~Kset()
{
 Knoten *ptemp = pFirst;
 for(; Anzahl&gt;0;)
 {
  pFirst = pFirst-&gt;pNext;
  delete ptemp;
  ptemp = pFirst;
  Anzahl--;
 }
}

//insert_front//////////////////////////////////////////////////////////////////

template &lt;class T&gt;
void Kset&lt;T&gt;::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pLast = pFirst;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}

//Überladen &lt;&lt; Ausgabeoperator

template &lt;class T&gt;
ostream &amp; operator &lt;&lt; (ostream&amp;, const Kset&lt;T&gt; &amp;)

{
 Kset::Knoten *ptemp = kl.pFirst;
 for(int anz = kl.Anzahl;  anz != 0; anz--)
 {
  cout&lt;&lt;ptemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  ptemp = ptemp-&gt;pNext;
 }
 cout&lt;&lt;endl;
 return os;
}
</code></pre>
<p>main</p>
<pre><code class="language-csharp">Kset &lt;int&gt; k;

//vorne einfügen
      k.insert_front(1);
      k.insert_front(2);
      k.insert_front(3);

      cout&lt;&lt;k;
</code></pre>
<p>bei cout&lt;&lt;k sagt er mir was von wegen linkerfehler ...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140015/templates-und-operatoren-überladen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 22:17:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/140015.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Mar 2006 11:07:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 11:08:29 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich habe folgendes Problem: Wenn ich in meinem Programm operatoren überladen will, sträubt sich das Programm dagegen ^^<br />
Woran kann das liegen?</p>
<p>dekl</p>
<pre><code class="language-csharp">#include &lt;conio.h&gt;
#include &lt;iostream.h&gt;

template &lt;class T&gt;
class Kset
{
private:
        struct Knoten
        {
         int Inhalt;
         Knoten *pNext;
        };

        int Anzahl;
        Knoten *pFirst;
        Knoten *pLast;

public:
        Kset();
        //Kset(const Kset &amp;obj);
        //Kset &amp;Kset::verein(const Kset &amp;obj);
        //Kset(const int *obj, const int Array);
        ~Kset();

        void insert_front(int obj);
        //void insert_back(int obj);
        //void insert_position(int obj, int pos);
        //void delete_front();
        //void delete_back();
        //void delete_pos(int pos);
        //void view_first();
        //void view_last();
        //void view_all();
        //int view_position(int pos);
        //bool member_of_list(int obj);
        //void push_array(const int *obj, const int Array);
        //void clear_List();                  
        //int get_nachfolger(int obj);
        //int get_kleinstes_element();
        //int get_groesstes_element();
        //void get_mittelwert();
        //int get_anzahl();

        friend ostream&amp; operator &lt;&lt; (ostream&amp;, const Kset&lt;T&gt; &amp;);
        //friend istream&amp; operator &gt;&gt; (istream&amp;, const Kset&lt;T&gt; &amp;);

};

#include &quot;impl0000.hpp&quot;
</code></pre>
<p>impl</p>
<pre><code class="language-csharp">//Konstruktor///////////////////////////////////////////////////////////////////

template &lt;class T&gt;
Kset&lt;T&gt;::Kset()
{
 Anzahl = 0;
 pFirst = pLast = NULL;
}

//Dekonstruktor/////////////////////////////////////////////////////////////////

template &lt;class T&gt;
Kset&lt;T&gt;::~Kset()
{
 Knoten *ptemp = pFirst;
 for(; Anzahl&gt;0;)
 {
  pFirst = pFirst-&gt;pNext;
  delete ptemp;
  ptemp = pFirst;
  Anzahl--;
 }
}

//insert_front//////////////////////////////////////////////////////////////////

template &lt;class T&gt;
void Kset&lt;T&gt;::insert_front(int obj)
{
 if(Anzahl == 0)
 {
  pFirst = new Knoten;
  pFirst-&gt;Inhalt = obj;
  pFirst-&gt;pNext = NULL;
  pLast = pFirst;
 }
 else
 {
  Knoten *pNew = new Knoten;
  pNew-&gt;Inhalt = obj;
  pNew-&gt;pNext = pFirst;
  pFirst = pNew;
 }
Anzahl++;
}

//Überladen &lt;&lt; Ausgabeoperator

template &lt;class T&gt;
ostream &amp; operator &lt;&lt; (ostream&amp;, const Kset&lt;T&gt; &amp;)

{
 Kset::Knoten *ptemp = kl.pFirst;
 for(int anz = kl.Anzahl;  anz != 0; anz--)
 {
  cout&lt;&lt;ptemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  ptemp = ptemp-&gt;pNext;
 }
 cout&lt;&lt;endl;
 return os;
}
</code></pre>
<p>main</p>
<pre><code class="language-csharp">Kset &lt;int&gt; k;

//vorne einfügen
      k.insert_front(1);
      k.insert_front(2);
      k.insert_front(3);

      cout&lt;&lt;k;
</code></pre>
<p>bei cout&lt;&lt;k sagt er mir was von wegen linkerfehler ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013832</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Sat, 11 Mar 2006 11:08:29 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 11:13:16 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>mach aus deinem friend:</p>
<pre><code class="language-cpp">template&lt;typename U&gt;
friend ostream&amp; operator &lt;&lt; (ostream&amp;, const Kset&lt;U&gt; &amp;);
</code></pre>
<p>Dann sollte das gehen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1013836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013836</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Mar 2006 11:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 11:22:54 GMT]]></title><description><![CDATA[<p>danke - aber es will nicht *heul*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013845</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Sat, 11 Mar 2006 11:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 11:27:50 GMT]]></title><description><![CDATA[<p>Wie wäre es mit Fehlermeldungen? So können wir auch nur raten.</p>
<p>BR</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013849</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Mar 2006 11:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 11:30:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Es sieht so aus, als hättest du die Namen der Argumente vergessen!
template &lt;class T&gt;
ostream &amp; operator &lt;&lt; (ostream&amp;, const Kset&lt;T&gt; &amp;)
{
 Kset::Knoten *ptemp = kl.pFirst;
 for(int anz = kl.Anzahl;  anz != 0; anz--)
 {
  //hier willst du wahrscheinlich nicht den ostream cout, sondern den mit dem nichtgefundenen namen benutzen
  cout&lt;&lt;ptemp-&gt;Inhalt&lt;&lt;&quot; &quot;;

  ptemp = ptemp-&gt;pNext;
 }
 //auch hier nicht cout, sondern den den ostream-Parameter mit dem nichtgefundenen namen
 cout&lt;&lt;endl;

 return os;//hier den ostream-Parameter mit dem nichtgefundenen namen zurückgeben
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1013853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013853</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Sat, 11 Mar 2006 11:30:38 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 11:46:58 GMT]]></title><description><![CDATA[<p>hab das jetzt mal verändert ...</p>
<pre><code class="language-csharp">ostream &amp; operator &lt;&lt; (ostream &amp;os, Kset &amp; kl)
{
 Kset::Knoten *ptemp = kl.pFirst;
 for(int anz = kl.Anzahl;  anz != 0; anz--)
 {
  cout&lt;&lt;ptemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  ptemp = ptemp-&gt;pNext;
 }
 cout&lt;&lt;endl;
 return os;
}
</code></pre>
<p>aber es will net ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013862</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Sat, 11 Mar 2006 11:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 11:47:42 GMT]]></title><description><![CDATA[<p>Wie wäre es mit Fehlermeldungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013863</guid><dc:creator><![CDATA[wh]]></dc:creator><pubDate>Sat, 11 Mar 2006 11:47:42 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 12:03:00 GMT]]></title><description><![CDATA[<p>Du solltest cout auch mit os ersetzen damit das ganze hier überhaupt sinn macht.</p>
<pre><code class="language-cpp">ostream &amp; operator &lt;&lt; (ostream &amp;os, Kset &amp; kl)
{
 Kset::Knoten *ptemp = kl.pFirst;
 for(int anz = kl.Anzahl;  anz != 0; anz--)
 {
  os&lt;&lt;ptemp-&gt;Inhalt&lt;&lt;&quot; &quot;;
  ptemp = ptemp-&gt;pNext;
 }
 os&lt;&lt;endl;
 return os;
}
</code></pre>
<p>Edit: <em><strong>Fehlermeldungen zeigen! Die 3.</strong></em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013878</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Mar 2006 12:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 12:02:48 GMT]]></title><description><![CDATA[<p>Jetzt solltest du nur noch dein cout durch deinen angelegten ostream&amp; os ersetzen, dann sollte es auch funktionieren <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/1013879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013879</guid><dc:creator><![CDATA[weißnicht]]></dc:creator><pubDate>Sat, 11 Mar 2006 12:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 12:03:23 GMT]]></title><description><![CDATA[<p>1. Wieso cout &lt;&lt; ... und nicht os &lt;&lt; ...?<br />
2. Wieso plötzlich Kset &amp;kl und nicht mehr const Kset &amp;kl?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013881</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Sat, 11 Mar 2006 12:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 12:04:07 GMT]]></title><description><![CDATA[<p>Also ... Fehlermeldung wie oben schon gesagt:</p>
<p>Linkerfehler ...</p>
<p>[Linker Fehler] Unresolved external '_STL::basic_ostream&lt;char, _STL::char_traits&lt;char&gt; &gt;&amp; operator &lt;&lt;(_STL::basic_ostream&lt;char, _STL::char_traits&lt;char&gt; &gt;&amp;, const Kset&lt;int&gt;)' referenced from C:\LISTE2\TEMPLATE2\MAIN_T.OBJ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013882</guid><dc:creator><![CDATA[Mr. Blonde]]></dc:creator><pubDate>Sat, 11 Mar 2006 12:04:07 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 12:04:54 GMT]]></title><description><![CDATA[<p>schorsch code schrieb:</p>
<blockquote>
<p>2. Wieso plötzlich Kset &amp;kl und nicht mehr const Kset &amp;kl?</p>
</blockquote>
<p>Stimmt ist mir grad gar net aufgefallen. Aber er ist selber Schuld wenn er net mit Fehlermeldungen kommt <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>BR</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1013884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013884</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Mar 2006 12:04:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templates und operatoren überladen on Sat, 11 Mar 2006 12:09:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
class Kset{
 //  ...
 template&lt;typename U&gt;
 friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;, Kset&lt;U&gt; const &amp;);
};
// in impl
template&lt;typename U&gt;
std::ostream &amp; operator&lt;&lt;(std::ostream &amp; os, Kset&lt;U&gt; const &amp; ks){
   typename Kset&lt;U&gt;::Knoten *ptemp = kl.pFirst;
   for(int anz = kl.Anzahl;  anz != 0; anz--){
      os &lt;&lt; ptemp-&gt;Inhalt &lt;&lt; &quot; &quot;;
      ptemp = ptemp-&gt;pNext;
   }
   os &lt;&lt; std::endl;
   return os;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1013889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1013889</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Mar 2006 12:09:21 GMT</pubDate></item></channel></rss>