<?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[template-Funktion als friend-function einer nicht-template Klasse ?]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe ein Linkerproblem bei oben genannter Situation.<br />
Eine ganz normale nicht-template-Klasse benötigt eine Funktionalität, die am besten mit einer templatefunktion zu realisieren ist. Diese funktion braucht aber zugriff auf private Daten. Daher muss sie befreundet sein. Der Code sieht so aus:</p>
<p>h-Datei:</p>
<pre><code class="language-cpp">class A : public B
{
    Q_OBJECT

public:
// Konstruktor, Funktionen usw...
protected:
// Daten, die meine befreundete Funktion nutzen können muss

    QHostAddress m_read_hostaddress;
    QUdpSocket* m_read_socketdevice;
private:
// Daten die meine befreundete Funktion nutzen können muss
    QByteArray m_sendbuffer;
    QDataStream m_ds;
// Jetzt kommen die nötigen befreundeten Funktionsdefinitionen
    friend bool sendValue(A, int, double);
    friend bool sendValue(A, int, float);
    friend bool sendValue(A, int, int);
    friend bool sendValue(A, int, bool);
};

// Jetzt kommt die befreundete Funktion als template:
template &lt;typename T&gt;
bool sendValue(A a, int id, T value)
{
// Hier passiert dann was
}
</code></pre>
<p>cpp-Datei</p>
<pre><code class="language-cpp">bool A::tu_was(double heading)
{
    return  sendValue(APHDG, heading);
}
</code></pre>
<p>Also so funktioniert es nicht.<br />
Dann hab ich versucht, statt send Value(A a,...) sendValue(const A* a,...) zu machen und bei den funktionsaufrufen immer (this, ...) zu machen.</p>
<p>Das kompiliert und linkt zwar als statische lib, aber wenn ich mein Hauptprogramm das diese staticlib nutzt, linke, bekomme ich undefined references auf eben diese Funktion sendValue().</p>
<p>Nu bin ich am Ende mit meinem Latein und hoffe auf guten Input!<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220981/template-funktion-als-friend-function-einer-nicht-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 05:03:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220981.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Aug 2008 20:20:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template-Funktion als friend-function einer nicht-template Klasse ? on Sat, 23 Aug 2008 20:20:02 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe ein Linkerproblem bei oben genannter Situation.<br />
Eine ganz normale nicht-template-Klasse benötigt eine Funktionalität, die am besten mit einer templatefunktion zu realisieren ist. Diese funktion braucht aber zugriff auf private Daten. Daher muss sie befreundet sein. Der Code sieht so aus:</p>
<p>h-Datei:</p>
<pre><code class="language-cpp">class A : public B
{
    Q_OBJECT

public:
// Konstruktor, Funktionen usw...
protected:
// Daten, die meine befreundete Funktion nutzen können muss

    QHostAddress m_read_hostaddress;
    QUdpSocket* m_read_socketdevice;
private:
// Daten die meine befreundete Funktion nutzen können muss
    QByteArray m_sendbuffer;
    QDataStream m_ds;
// Jetzt kommen die nötigen befreundeten Funktionsdefinitionen
    friend bool sendValue(A, int, double);
    friend bool sendValue(A, int, float);
    friend bool sendValue(A, int, int);
    friend bool sendValue(A, int, bool);
};

// Jetzt kommt die befreundete Funktion als template:
template &lt;typename T&gt;
bool sendValue(A a, int id, T value)
{
// Hier passiert dann was
}
</code></pre>
<p>cpp-Datei</p>
<pre><code class="language-cpp">bool A::tu_was(double heading)
{
    return  sendValue(APHDG, heading);
}
</code></pre>
<p>Also so funktioniert es nicht.<br />
Dann hab ich versucht, statt send Value(A a,...) sendValue(const A* a,...) zu machen und bei den funktionsaufrufen immer (this, ...) zu machen.</p>
<p>Das kompiliert und linkt zwar als statische lib, aber wenn ich mein Hauptprogramm das diese staticlib nutzt, linke, bekomme ich undefined references auf eben diese Funktion sendValue().</p>
<p>Nu bin ich am Ende mit meinem Latein und hoffe auf guten Input!<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570254</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Sat, 23 Aug 2008 20:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to template-Funktion als friend-function einer nicht-template Klasse ? on Sat, 23 Aug 2008 21:54:08 GMT]]></title><description><![CDATA[<p>vielleicht so:</p>
<pre><code class="language-cpp">class A : public B
{
    // ...
    template&lt;class T&gt; friend bool sendValue(A, int, T);
}
</code></pre>
<p>Hab allerdings im moment keinen compiler zur verfügung, ist also ungetestet <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>
<blockquote>
<p>Diese funktion braucht aber zugriff auf private Daten.</p>
</blockquote>
<p>Dann mach aus ihr doch ne Memberfunktion..</p>
<p>mfg<br />
Double *T</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570295</guid><dc:creator><![CDATA[double *T]]></dc:creator><pubDate>Sat, 23 Aug 2008 21:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to template-Funktion als friend-function einer nicht-template Klasse ? on Sun, 24 Aug 2008 09:23:46 GMT]]></title><description><![CDATA[<p>double *T schrieb:</p>
<blockquote>
<blockquote>
<p>Diese funktion braucht aber zugriff auf private Daten.</p>
</blockquote>
<p>Dann mach aus ihr doch ne Memberfunktion..</p>
</blockquote>
<p>Ich will aber keine template-Klasse, sondern nur eine template-funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570362</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Sun, 24 Aug 2008 09:23:46 GMT</pubDate></item><item><title><![CDATA[Reply to template-Funktion als friend-function einer nicht-template Klasse ? on Sun, 24 Aug 2008 09:31:53 GMT]]></title><description><![CDATA[<p>PhilippM schrieb:</p>
<blockquote>
<p>Ich will aber keine template-Klasse, sondern nur eine template-funktion.</p>
</blockquote>
<p>Ein Methodentemplate macht die Klasse noch lange nicht zu einer Templateklasse.</p>
<pre><code class="language-cpp">class A
{
    public:
        template&lt;typename U&gt;
        bool sendValue(A a, int id, U value)
        {
            // ...
        }
};
</code></pre>
<p>Wo ist die Klasse nun bitte eine Templateklasse?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570365</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 24 Aug 2008 09:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to template-Funktion als friend-function einer nicht-template Klasse ? on Sun, 24 Aug 2008 09:51:34 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Ein Methodentemplate macht die Klasse noch lange nicht zu einer Templateklasse.<br />
...<br />
Wo ist die Klasse nun bitte eine Templateklasse?</p>
</blockquote>
<p>Wenn schon, dann wird es kein Klassentemplate.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570373</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 24 Aug 2008 09:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to template-Funktion als friend-function einer nicht-template Klasse ? on Sun, 24 Aug 2008 09:58:25 GMT]]></title><description><![CDATA[<p>das da</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class A {
  public:
    template &lt;typename T&gt; friend bool SendValue(A&amp;, int, T);
    void DoSth() {
      int x = 4;
      SendValue(*this, x, 1.0f);
    }
    bool Hello() {
      std::cout &lt;&lt; &quot;hello&quot;;
      return true;
    }

};

template &lt;typename T&gt; bool SendValue(A&amp; a, int i, T t) {
  return a.Hello();
} 

A myobject;

int main() {
  A.DoSth();
}
</code></pre>
<p>compiliert eigentlich problemlos (sollte es zumindest^^), vergleich mal mit deinem Code, was da anders läuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570377</guid><dc:creator><![CDATA[Paul Manns]]></dc:creator><pubDate>Sun, 24 Aug 2008 09:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to template-Funktion als friend-function einer nicht-template Klasse ? on Fri, 29 Aug 2008 18:34:02 GMT]]></title><description><![CDATA[<p>okay, dankeschön für den Input, dass ein Funktionstemplate in einer nicht-template klasse kein Problem ist.<br />
Ich hab ne memberfunktion draus gemacht und es fluppt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573757</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Fri, 29 Aug 2008 18:34:02 GMT</pubDate></item></channel></rss>