<?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[Friend Methode für Template außerhalb definieren .]]></title><description><![CDATA[<p>Hallo Leute ich schreibe gerade ein Template mit dem Namen Array.<br />
Nun habe ich den &lt;&lt; operator als friend überladen.<br />
Habe diesen aber intern definiert . Und würde gerne wissen wie die Syntax für diese Operatordefinition außerhalb der Klassendefinition auszusehen hätte.</p>
<p>Folgendes Template :</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
using std::ostream;
template &lt;class T&gt;

class Array
{
    private:

        static int defaultsize;
        T *internArray;
        int size;

    public:

        int getDefaultSize()const; // 
        int getActualSize()const; // 
        void setDefaultSize(int Value); //
        T getElement(int place)const;
        void setElement(T obstacle,int place);
        Array();
        Array(int _size);
        ~Array();
        Array(const Array&amp;);
        Array&lt;T&gt;&amp; operator=(const Array&lt;T&gt;&amp; rhs);
        Array&lt;T&gt; operator+(const Array&lt;T&gt;&amp; rhs);

        //STREAM OPERATIONS
        friend ostream&amp; operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)
        {
            for ( int i = 0 ; i &lt; rhs.getActualSize() ; i ++)
            {
             stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; endl;
            }
        return stream;
    }
};
</code></pre>
<p>Idee :</p>
<pre><code class="language-cpp">ostream&amp; ostream::operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)
        {
            for ( int i = 0 ; i &lt; rhs.getActualSize() ; i ++)
            {
             stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; endl;
            }
        return stream;}
</code></pre>
<p>Allerdings funktioniert dies nicht .. könnte mir jemand kurz erklären was ich hier falsch gemacht habe ?</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284487/friend-methode-für-template-außerhalb-definieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 22:17:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284487.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Apr 2011 17:29:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 17:29:26 GMT]]></title><description><![CDATA[<p>Hallo Leute ich schreibe gerade ein Template mit dem Namen Array.<br />
Nun habe ich den &lt;&lt; operator als friend überladen.<br />
Habe diesen aber intern definiert . Und würde gerne wissen wie die Syntax für diese Operatordefinition außerhalb der Klassendefinition auszusehen hätte.</p>
<p>Folgendes Template :</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
using std::ostream;
template &lt;class T&gt;

class Array
{
    private:

        static int defaultsize;
        T *internArray;
        int size;

    public:

        int getDefaultSize()const; // 
        int getActualSize()const; // 
        void setDefaultSize(int Value); //
        T getElement(int place)const;
        void setElement(T obstacle,int place);
        Array();
        Array(int _size);
        ~Array();
        Array(const Array&amp;);
        Array&lt;T&gt;&amp; operator=(const Array&lt;T&gt;&amp; rhs);
        Array&lt;T&gt; operator+(const Array&lt;T&gt;&amp; rhs);

        //STREAM OPERATIONS
        friend ostream&amp; operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)
        {
            for ( int i = 0 ; i &lt; rhs.getActualSize() ; i ++)
            {
             stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; endl;
            }
        return stream;
    }
};
</code></pre>
<p>Idee :</p>
<pre><code class="language-cpp">ostream&amp; ostream::operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)
        {
            for ( int i = 0 ; i &lt; rhs.getActualSize() ; i ++)
            {
             stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; endl;
            }
        return stream;}
</code></pre>
<p>Allerdings funktioniert dies nicht .. könnte mir jemand kurz erklären was ich hier falsch gemacht habe ?</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043803</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:29:26 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 17:31:23 GMT]]></title><description><![CDATA[<p>Dir fehlt das template &lt;class T&gt; für den Operator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043805</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 17:34:20 GMT]]></title><description><![CDATA[<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>Dir fehlt das template &lt;class T&gt; für den Operator.</p>
</blockquote>
<p>Der Operator bezieht sich doch aber auf die Klasse ostream.<br />
Ich sage ihm doch über das Friend nur dass er Zugriff auf die Member von Array hat oder habe ich da etwas falsch verstanden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043810</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 18:03:42 GMT]]></title><description><![CDATA[<p>Der operator ist eine freie Funktion, du sagst innerhalb der Klasse nur, dass dieser auf die privaten Member zugreifen darf.</p>
<p>Außerdem gibt es iostream.h nicht.</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Array
{
    private:

        static int defaultsize;
        T *internArray;
        int size;

    public:

        int getDefaultSize()const; // 
        int getActualSize()const; // 
        void setDefaultSize(int Value); //
        T getElement(int place)const;
        void setElement(T obstacle,int place);
        Array();
        Array(int _size);
        ~Array();
        Array(const Array&amp;);
        Array&lt;T&gt;&amp; operator=(const Array&lt;T&gt;&amp; rhs);
        Array&lt;T&gt; operator+(const Array&lt;T&gt;&amp; rhs);

        template &lt;class T&gt;
        friend ostream&amp; operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs);
};

template &lt;class T&gt;
ostream&amp; operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)
{
    for ( int i = 0 ; i &lt; rhs.getActualSize() ; i ++)
    {
        stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; endl;
    }
	return stream;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043811</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 17:48:27 GMT]]></title><description><![CDATA[<p>Bei diesem Ansatz bekomme ich 2 Fehlermeldungen</p>
<pre><code class="language-cpp">//Bei : 
template &lt;class T&gt; 
//&quot;template parameter list matching the non-templated nested type 1 should be //empty('template&lt;&gt;') &quot;

//und bei
ostream&amp; ostream::operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)  
//overloaded 'operator&lt;&lt;' must be a binary operator (has 3 parameters)&quot;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043816</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 17:53:04 GMT]]></title><description><![CDATA[<p>bei dem Beispiel ist auch ein &quot;ostream::&quot; zu viel.</p>
<p>Ansonsten: Du kannst natürlich auch globale Funktionen als Template definieren - ist in dem Beispiel auch notwendig, weil du nicht berechtigt bist, neue Operatoren in die Klasse ostream zu packen.</p>
<p>(genau genommen gibt es keine &quot;Klasse ostream&quot; nur ein &quot;typedef basic_ostream&lt;char&gt; ostream;&quot; ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043819</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:53:04 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 18:13:26 GMT]]></title><description><![CDATA[<p>Das geht mit Sicherheit auch mit friend.</p>
<p>Edit: ich habe meinen vorherigen Post dahingehend editiert.<br />
Edit2: Der Linker muss wissen, dass die friend funktion (keine methode) auch ein template ist.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std; 

template &lt;class T&gt;
class A
{
public:
	A(T var): var(var){}

	template &lt;class T&gt;
	friend ostream&amp; operator &lt;&lt; (ostream&amp; ostr, const A&lt;T&gt;&amp; a);

private:
	T var;
};

template&lt;class T&gt;
ostream&amp; operator &lt;&lt; (ostream&amp; ostr, const A&lt;T&gt;&amp; a)
{
	ostr &lt;&lt; a.var;
	return ostr;
}

int main() 
{
	A&lt;int&gt; a(5);
	cout &lt;&lt; a;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043823</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:13:26 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 18:28:02 GMT]]></title><description><![CDATA[<p>Warum muss ich denn vor der Operatordefinition noch template &lt;class T &gt; angeben ..<br />
Der Operator bezieht sich doch nicht auf die template Klasse ?</p>
<p>Jetzt funktioniert es , allerdings bekomme ich einen Linker error durch folgende Zeile :</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;ArrayTemplate.h&quot;
using std::cout;
using std::ostream;
using std::endl;

int main (int argc, const char * argv[])
{

    srand(100);
    Array&lt;int&gt; IntegerArray(25);
    Array&lt;int&gt; IntegerCopy(10);
    IntegerArray.setElement(6,7);

    //IntegerArray = IntegerCopy;
    cout &lt;&lt; IntegerArray; // DIESE ZEILE VERURSACHT LINKER ERROR 
    return 0;
}
</code></pre>
<p>LINKER ERROR:</p>
<p>Undefined symbols for architecture x86_64:<br />
&quot;operator&lt;&lt;(std::ostream&amp;, Array&lt;int&gt; const&amp;)&quot;, referenced from:<br />
_main in main.o<br />
ld: symbol(s) not found for architecture x86_64<br />
clang: error: linker command failed with exit code 1 (use -v to see invocation)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043836</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 18:31:47 GMT]]></title><description><![CDATA[<p>Klar ist dein operator&lt;&lt;() ein Template - schließlich bezieht er sich auf die Template-Klasse Array&lt;&gt;. Ansonsten hat BimBam seinen letzten Beitrag noch berichtigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043838</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 18:34:38 GMT]]></title><description><![CDATA[<p>Ok stimmt .<br />
Aber wodurch wird der Linker-Fehler verursacht ? <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/2043840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043840</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:34:38 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 18:41:40 GMT]]></title><description><![CDATA[<p>Vermutlich durch die Regeln der Template-Instanziierung:</p>
<pre><code class="language-cpp">friend ostream&amp; operator &lt;&lt; (ostream&amp; ostr, const A&lt;T&gt;&amp; a);
</code></pre>
<p>erklärt dem Compiler, daß für jeden Array&lt;T&gt; ein passender operator&lt;&lt; existiert - die müsstest du alle einzeln schreiben.<br />
template&lt;typename U&gt;<br />
friend ostream&amp; operator &lt;&lt; (ostream&amp; ostr, const A&lt;U&gt;&amp; a);<br />
[/cpp]erklärt den Template-Operator als Freund deiner Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043843</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 18:46:59 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Vermutlich durch die Regeln der Template-Instanziierung:</p>
<pre><code class="language-cpp">friend ostream&amp; operator &lt;&lt; (ostream&amp; ostr, const A&lt;T&gt;&amp; a);
</code></pre>
<p>erklärt dem Compiler, daß für jeden Array&lt;T&gt; ein passender operator&lt;&lt; existiert - die müsstest du alle einzeln schreiben.<br />
template&lt;typename U&gt;<br />
friend ostream&amp; operator &lt;&lt; (ostream&amp; ostr, const A&lt;U&gt;&amp; a);<br />
[/cpp]erklärt den Template-Operator als Freund deiner Klasse.</p>
</blockquote>
<p>Definiere ich den Operator innerhalb der Klassendefiniton bekomme ich diesen Fehler allerdings nicht . <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using std::ostream;
using std::endl;

template &lt;class T&gt;
class Array
{
    private:

        static int defaultsize;
        T *internArray;
        int size;

    public:

        int getDefaultSize()const; // 
        int getActualSize()const; // 
        void setDefaultSize(int Value); //
        T getElement(int place)const;
        void setElement(T obstacle,int place);
        Array();
        Array(int _size);
        ~Array();
        Array(const Array&amp;);
        Array&lt;T&gt;&amp; operator=(const Array&lt;T&gt;&amp; rhs);
        Array&lt;T&gt; operator+(const Array&lt;T&gt;&amp; rhs);

        //STREAM OPERATIONS
        friend ostream&amp; operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)
       {
        for ( int i = 0 ; i &lt; rhs.getActualSize() ; i ++) 
        { 
            stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; endl; 
        } 
        return stream; 
    }

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043846</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 18:46:59 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 19:20:42 GMT]]></title><description><![CDATA[<p>Der Linker weiß nicht, dass die funktion ein template ist, also musst du es ihm sagen. Du musst also</p>
<pre><code class="language-cpp">template &lt;class T&gt; friend ostream&amp; operator &lt;&lt;(ostream&amp; stream, const Array&lt;T&gt;&amp; rhs);
</code></pre>
<p>innerhalb der Klasse schreiben und</p>
<pre><code class="language-cpp">template &lt;class T&gt; ostream&amp; operator &lt;&lt;(ostream&amp; stream, const Array&lt;T&gt;&amp; rhs){}
</code></pre>
<p>außerhalb der Klasse. Ich habe das doch schon weiter oben berichtigt.</p>
<p>Edit: Wenn du das template &lt;class T&gt; nicht vor die Funktion innerhalb der Klasse schreibst, dann sucht der Linker nach einer nicht template funktion, die es natürlich dann nicht gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043855</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 02 Apr 2011 19:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 19:32:21 GMT]]></title><description><![CDATA[<p>So wie du es mir vorgeschlagen hast funktioniert es nicht. Das kann also nicht stimmen .<br />
Ich belasse es jetzt bei dieser Version.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using std::ostream;
using std::endl;

template &lt;class T&gt;
class Array
{
    private:

        static int defaultsize;
        T *internArray;
        int size;

    public:

        int getDefaultSize()const; // 
        int getActualSize()const; // 
        void setDefaultSize(int Value); //
        T getElement(int place)const;
        void setElement(T obstacle,int place);
        Array();
        Array(int _size);
        ~Array();
        Array(const Array&amp;);
        Array&lt;T&gt;&amp; operator=(const Array&lt;T&gt;&amp; rhs);
        Array&lt;T&gt; operator+(const Array&lt;T&gt;&amp; rhs);

        //STREAM OPERATIONS
        friend ostream&amp; operator &lt;&lt;(ostream&amp; stream,const Array&lt;T&gt;&amp; rhs)
        {
        for ( int i = 0 ; i &lt; rhs.getActualSize() ; i ++) 
        { 
            stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; endl; 
        } 
        return stream; 
    }

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043859</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 19:32:21 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 19:47:12 GMT]]></title><description><![CDATA[<p>Bei mir geht es.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template &lt;class T&gt; 
class Array 
{ 
private: 

    static int defaultsize; 
    T *internArray; 
    int size; 

public: 

    int getDefaultSize()const;
    int getActualSize()const;
    void setDefaultSize(int Value);
    T getElement(int place)const; 
    void setElement(T obstacle,int place); 
	Array(){}; 
    Array(int _size); 
	~Array(){}; 
    Array(const Array&lt;T&gt;&amp;);
    Array&lt;T&gt;&amp; operator=(const Array&lt;T&gt;&amp; rhs);
    Array&lt;T&gt; operator+(const Array&lt;T&gt;&amp; rhs); 

    template &lt;class T&gt; 
    friend std::ostream&amp; operator &lt;&lt; (std::ostream&amp; stream, const Array&lt;T&gt;&amp; rhs); 
}; 

template &lt;class T&gt; 
std::ostream&amp; operator &lt;&lt; (std::ostream&amp; stream, const Array&lt;T&gt;&amp; rhs) 
{ 
    stream &lt;&lt; &quot;Array&quot;; 
    return stream; 
}

int main() 
{
	Array&lt;int&gt; a;
	std::cout &lt;&lt; a;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043864</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 02 Apr 2011 19:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 19:44:31 GMT]]></title><description><![CDATA[<p>Keine Ahnung was das ist . Ich bekomme diese Fehlermeldung bei deiner Version:</p>
<pre><code class="language-cpp">Undefined symbols for architecture x86_64:
  &quot;operator&lt;&lt;(std::ostream&amp;, Array&lt;int&gt; const&amp;)&quot;, referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043865</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Sat, 02 Apr 2011 19:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Sat, 02 Apr 2011 19:51:53 GMT]]></title><description><![CDATA[<p>Da bin ich überfragt... Compiler reparieren? Projekt neu erstellen? Hast du es in einem neuen Projekt versucht?</p>
<p>Compiler und OS wären eventuell nützlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043868</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 02 Apr 2011 19:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Mon, 04 Apr 2011 21:46:48 GMT]]></title><description><![CDATA[<p>Das Problem war einfach dass ich in meiner Operator Definiton nicht wieder T als Platzhalter nutzen darf ...</p>
<p>LÖSUNG :</p>
<pre><code class="language-cpp">// Sebastian Boldts AAT ( Awesome Array Template )
#include &lt;iostream&gt;
template &lt;class T&gt;
class Array
{
    private:

        static int defaultsize;
        T *internArray;
        int size;

    public:

        int getDefaultSize()const; // 
        int getActualSize()const; // 
        void setDefaultSize(int Value); //
        T getElement(int place)const;
        void setElement(T obstacle,int place);
        Array();
        Array(int _size);
        ~Array();
        Array(const Array&amp;);
        Array&lt;T&gt;&amp; operator=(const Array&lt;T&gt;&amp; rhs);
        Array&lt;T&gt; operator+(const Array&lt;T&gt;&amp; rhs);

        //STREAM OPERATIONS
    template &lt;class U&gt;
    friend std::ostream&amp; operator &lt;&lt;(std::ostream&amp; stream,const Array&lt;U&gt; rhs);

};

/****IMPLEMENTIERUNG****/

template &lt;class T&gt;
int Array&lt;T&gt;::defaultsize = 10;

template &lt;class T&gt;
int getDefaultSize()
{

    return Array&lt;T&gt;::defaultsize;
}
template &lt;class T &gt;
int Array&lt;T&gt;::getActualSize()const
{
    return size;
}

template &lt;class T&gt;
void Array&lt;T&gt;::setDefaultSize(int Value)
{
    Array&lt;T&gt;::defaultsize = Value;
}
template &lt;class T&gt;
T Array&lt;T&gt;::getElement(int place)const
{
    return internArray[place];    
}
template &lt;class T&gt;
void Array&lt;T&gt;::setElement(T obstacle,int place)
{   
    if(place &lt; size)
    {
    internArray[place] = obstacle;
    }
}

//C'toren und D'toren

template &lt;class T&gt;
Array&lt;T&gt;::Array():size(getDefaultSize())
{
    internArray = new T[size];
    for (int i = 0 ; i &lt; size ; i ++)
    {
        internArray[i] = 0;
    }
}

template &lt;class T&gt;
Array&lt;T&gt;::Array(int _size):size(_size)
{
    internArray = new T[_size];
    for (int i = 0 ; i &lt; size ; i ++)
    {
        internArray[i] = 0;
    }
}

template &lt;class T&gt;
Array&lt;T&gt;::Array(const Array&amp; _array):size(_array.size)
{

    internArray = new T[size];
    for (int i = 0 ; i &lt; size ; i ++)
    {
        internArray[i] = _array.getElement(i);
    }
}
template &lt;class T &gt;
Array&lt;T&gt;::~Array()
{

    free(internArray);
}

//OPERATOREN

template &lt;class T &gt;
Array&lt;T&gt;&amp; Array&lt;T&gt;::operator=(const Array&lt;T&gt;&amp; rhs)
{
    size = rhs.getActualSize();
    delete[]internArray;
    internArray = new T[size];
    for(int i = 0 ; i &lt; size ; i ++)
    {
        internArray[i] = rhs.getElement(i);
    }
    return *this;
}

template &lt;class T&gt;
Array&lt;T&gt; Array&lt;T&gt;::operator+(const Array&lt;T&gt;&amp; rhs)
{
    Array&lt;T&gt; temp(size +rhs.getActualSize());
    for(int i = size ; i &lt; size ; i ++)
    {
        temp.setElement(i) = internArray[i];
    }
    for(int i = size+1 ; i &lt; temp.getActualSize() ; i ++)
    {
        temp.setElement(i) = rhs.getElement(i);
    }
    return temp;

}

template &lt;class U&gt;
std::ostream&amp; operator &lt;&lt;(std::ostream&amp; stream,const Array&lt;U&gt; rhs)
{ 
    for ( int i = 0 ; i &lt; rhs.internArray[i] ; i ++) 
    { 
        stream &lt;&lt; &quot; Array an Stelle : &quot; &lt;&lt; i &lt;&lt; &quot; : &quot; &lt;&lt; rhs.getElement(i) &lt;&lt; std::endl; 
    } 
    return stream; 
}

//#include &quot;ArrayTemplate.cpp&quot;

//...... Coming Soon
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2044752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044752</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Mon, 04 Apr 2011 21:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Mon, 04 Apr 2011 21:54:17 GMT]]></title><description><![CDATA[<p>Das ist natürlich logisch. Das sind die Fehler wegen denen man sich oft tot-sucht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Immerhin funzt es jetzt <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/2044754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044754</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 04 Apr 2011 21:54:17 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Mon, 04 Apr 2011 22:06:37 GMT]]></title><description><![CDATA[<p>Und nachdem du deinen Quelltext durch den Compiler bekommen hast, kannst du dich als nächstes um die inhaltlichen Fehler kümmern:</p>
<p>- wenn du Speicher mit new[] anforderst, solltest du ihn auch mit delete[] freigeben und nicht mit free()<br />
- der Zuweisungsoperator ist nicht gegen Selbstzuweisung geschützt<br />
- die Anweisung <code>internArray[i]=0;</code> schränkt die Verwandbarkeit der Klasse etwas ein<br />
- der Vergleich <code>i&lt;rhs.internArray[i]</code> im Ausgabe-Operator ist auch unsinnig</p>
<p>PS: Außerdem kommt der Ausgabe-Operator komplett mit den öffentlich erreichbaren Teilen des Arrays (getActualSize() und getElement()) aus, also kannst du dir das friend ersparen.</p>
<p>PPS: Zu den Vorteilen von statischen Methoden und const-Referenzen sage ich jetzt nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044760</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 04 Apr 2011 22:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode für Template außerhalb definieren . on Mon, 04 Apr 2011 22:14:16 GMT]]></title><description><![CDATA[<p>Ok , dankeschön .<br />
Werde mich um die Fehler kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044763</guid><dc:creator><![CDATA[Bacid90210]]></dc:creator><pubDate>Mon, 04 Apr 2011 22:14:16 GMT</pubDate></item></channel></rss>