<?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[Funktionstemplate und Funktionszeiger]]></title><description><![CDATA[<p>Hallo zusammen, ich habe wieder mal ein Problem wo ich nicht weiter komme, habe schon überall nach geguckt, und verstehe es immer noch nicht wie ich mein Problem lösen soll. Hoffe das mir jemand helfen kann.</p>
<p><strong>Die Aufgabestellung lautet:</strong> Das eine Template-Funktion <strong>3</strong> Parameter übergeben bekommt, 1 und 2 Parameter sind Element bereiche eines Array[erstes Element und letztes Element], der 3. Parameter ist <strong>ein Funktionszeiger</strong> auf eine parameterlose Funktion &quot;die bei mir als <strong>next()</strong> definiert ist&quot;, sie liefert mit jedem Aufruf ein Wert, der für das nächste Element im Bereich zugewiesen wird.</p>
<p>Die ganzen Funktionen sind bei mir in einer Klasse definiert <strong>StaticArray:</strong></p>
<pre><code class="language-cpp">#pragma once
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;ctime&gt;
#include &quot;Fraction.h&quot;
#include &quot;Manager.h&quot;
template &lt;class T, unsigned int MAX_SIZE&gt;

class StaticArray

{
private:

	T elems[MAX_SIZE];

public:

void generate (T* pfirst, T* plast, T (*func)()){

	for (; pfirst != plast; ++pfirst)
	{*pfirst = next();}
};

T&amp; next()
{
	srand(time(NULL));
	Fraction f;
	f.setrandom();
	return f;
}

};
</code></pre>
<p>Generat Funktion fängt ab ersten Element an zu zählen und mit der <strong>next()</strong> Funktion weise ich jedem Element den <strong>zufälligen Bruch</strong> zu.<br />
Die zufällige Brüche werde auch erstellet mit der next() Funktion, dass stimmt glaube ich soweit.</p>
<p>Mein Problem ist, dass ich die <strong>Funktion next()</strong> nicht übergeben kann in die <strong>Funktion generate()</strong>, ich weiß einfach nicht wie ich die generate() aufrufen soll.</p>
<p>In main.cpp versuche ich die Funktion generate() mit <strong>einem Objekt</strong> von meiner <strong>Klasse StaticArray</strong> wo auch die Funktion deklariert ist aufrufen:</p>
<pre><code class="language-cpp">using namespace std;

int main(){

	StaticArray &lt;Fraction, 12&gt; ArrayFraction;

	ArrayFraction.generate(&amp;ArrayFraction[0],&amp;ArrayFraction[12],next());

	system(&quot;PAUSE&quot;);

	return 0; };
</code></pre>
<p>und dies funktioniert bei mir nicht, ich kann einfach nicht die next() Funktion in die generate () Funktion übergeben, ich weiß nicht was ich falsch mache, ich bitte um Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304461/funktionstemplate-und-funktionszeiger</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 17:38:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304461.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Jun 2012 18:38:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Wed, 06 Jun 2012 18:38:28 GMT]]></title><description><![CDATA[<p>Hallo zusammen, ich habe wieder mal ein Problem wo ich nicht weiter komme, habe schon überall nach geguckt, und verstehe es immer noch nicht wie ich mein Problem lösen soll. Hoffe das mir jemand helfen kann.</p>
<p><strong>Die Aufgabestellung lautet:</strong> Das eine Template-Funktion <strong>3</strong> Parameter übergeben bekommt, 1 und 2 Parameter sind Element bereiche eines Array[erstes Element und letztes Element], der 3. Parameter ist <strong>ein Funktionszeiger</strong> auf eine parameterlose Funktion &quot;die bei mir als <strong>next()</strong> definiert ist&quot;, sie liefert mit jedem Aufruf ein Wert, der für das nächste Element im Bereich zugewiesen wird.</p>
<p>Die ganzen Funktionen sind bei mir in einer Klasse definiert <strong>StaticArray:</strong></p>
<pre><code class="language-cpp">#pragma once
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;ctime&gt;
#include &quot;Fraction.h&quot;
#include &quot;Manager.h&quot;
template &lt;class T, unsigned int MAX_SIZE&gt;

class StaticArray

{
private:

	T elems[MAX_SIZE];

public:

void generate (T* pfirst, T* plast, T (*func)()){

	for (; pfirst != plast; ++pfirst)
	{*pfirst = next();}
};

T&amp; next()
{
	srand(time(NULL));
	Fraction f;
	f.setrandom();
	return f;
}

};
</code></pre>
<p>Generat Funktion fängt ab ersten Element an zu zählen und mit der <strong>next()</strong> Funktion weise ich jedem Element den <strong>zufälligen Bruch</strong> zu.<br />
Die zufällige Brüche werde auch erstellet mit der next() Funktion, dass stimmt glaube ich soweit.</p>
<p>Mein Problem ist, dass ich die <strong>Funktion next()</strong> nicht übergeben kann in die <strong>Funktion generate()</strong>, ich weiß einfach nicht wie ich die generate() aufrufen soll.</p>
<p>In main.cpp versuche ich die Funktion generate() mit <strong>einem Objekt</strong> von meiner <strong>Klasse StaticArray</strong> wo auch die Funktion deklariert ist aufrufen:</p>
<pre><code class="language-cpp">using namespace std;

int main(){

	StaticArray &lt;Fraction, 12&gt; ArrayFraction;

	ArrayFraction.generate(&amp;ArrayFraction[0],&amp;ArrayFraction[12],next());

	system(&quot;PAUSE&quot;);

	return 0; };
</code></pre>
<p>und dies funktioniert bei mir nicht, ich kann einfach nicht die next() Funktion in die generate () Funktion übergeben, ich weiß nicht was ich falsch mache, ich bitte um Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220356</guid><dc:creator><![CDATA[cobb]]></dc:creator><pubDate>Wed, 06 Jun 2012 18:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Wed, 06 Jun 2012 19:25:04 GMT]]></title><description><![CDATA[<p>cobb schrieb:</p>
<blockquote>
<p><strong>Die Aufgabestellung lautet:</strong> Das eine Template-Funktion <strong>3</strong> Parameter übergeben bekommt, 1 und 2 Parameter sind Element bereiche eines Array[erstes Element und letztes Element], der 3. Parameter ist <strong>ein Funktionszeiger</strong> auf eine parameterlose Funktion &quot;die bei mir als <strong>next()</strong> definiert ist&quot;, sie liefert mit jedem Aufruf ein Wert, der für das nächste Element im Bereich zugewiesen wird.</p>
</blockquote>
<p>Also eine Funktion mit Start-End Iterator-Paar, dass von einer Factoryfunction Werte bekommt. Dann ma los hier! C++11 Lösung:</p>
<pre><code class="language-cpp">template&lt;typename i_t, typename functor_t&gt;
void compute(i_t start, i_t end, functor_t f)
{
    std::for_each(start, end, [&amp;](decltype(*i_t) &amp;a){a = f();});
}
</code></pre>
<p><a href="http://ideone.com/rBy1I" rel="nofollow">Ideone</a>.<br />
Ohne C++11 hab ich keinen Plan... (nicht wegen den Lambdas, haha) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
War aber nur ein Denkansatz.</p>
<p>Edit: Natürlich nehme ich an, dass es irrelevant ist, dass der letzte Iterator auf das Element <strong>nach</strong> dem letzten zu bearbeitendem ist? Und das der Wert des/der Funktors/Funktion nicht für das nächste, sondern für das (von der Schleife aus gesehen) <strong>aktuelle</strong>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220380</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 06 Jun 2012 19:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Wed, 06 Jun 2012 20:34:26 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/algorithm/generate/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/generate/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220415</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 06 Jun 2012 20:34:26 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Wed, 06 Jun 2012 21:01:47 GMT]]></title><description><![CDATA[<p>Maxi schrieb:</p>
<blockquote>
<p><a href="http://www.cplusplus.com/reference/algorithm/generate/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/generate/</a></p>
</blockquote>
<p>Hä? Er soll selbst eine schreiben, sonst hätt' das doch schon längst jemand geschrieben <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/2220429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220429</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 06 Jun 2012 21:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Wed, 06 Jun 2012 22:39:35 GMT]]></title><description><![CDATA[<p>cobb schrieb:</p>
<blockquote>
<p>der 3. Parameter ist ein Funktionszeiger auf eine <strong>parameterlose Funktion</strong><br />
...<br />
Die ganzen Funktionen sind bei mir in einer Klasse definiert <strong>StaticArray:</strong></p>
<pre><code class="language-cpp">...
class StaticArray
{
...
T&amp; next()
{
...
}
};
</code></pre>
</blockquote>
<p>Als nichtstatische Memberfunktion ist dein next nicht so parameterlos wie du meinst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220465</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 06 Jun 2012 22:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Wed, 06 Jun 2012 22:43:16 GMT]]></title><description><![CDATA[<p>Hacker, danke für deine Mühe, ich muss leider gestehen, dass ich nicht wirklich dein Code nachvollziehen kann. Ja das ist schon richtig es muss der aktuelle Bereich (Element)..... mit dem Wert aufgefüllt werden. Der letzte Iterator soll einfach auf den letzten Element zeigen in einem Array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220466</guid><dc:creator><![CDATA[cobb]]></dc:creator><pubDate>Wed, 06 Jun 2012 22:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Wed, 06 Jun 2012 22:48:00 GMT]]></title><description><![CDATA[<p>Hallo camper, ich verstehe nicht ganz was du damit meinst, es werden ja keine Parameter übergeben bei der Funktion next(); wie ich dass verstehe. Wenn es Parameter übergeben bekommen hätte, würde es doch z.b. so aussehen &quot; next(int a, int b)&quot; oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220467</guid><dc:creator><![CDATA[cobb]]></dc:creator><pubDate>Wed, 06 Jun 2012 22:48:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Thu, 07 Jun 2012 04:07:24 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Maxi schrieb:</p>
<blockquote>
<p><a href="http://www.cplusplus.com/reference/algorithm/generate/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/generate/</a></p>
</blockquote>
<p>Hä? Er soll selbst eine schreiben, sonst hätt' das doch schon längst jemand geschrieben <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>
</blockquote>
<p>Naja, unter dem Link steht sogar der Quelltext für so eine Funktion, deshalb hab ich den rausgesucht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220482</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Thu, 07 Jun 2012 04:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Thu, 07 Jun 2012 04:50:35 GMT]]></title><description><![CDATA[<p>cobb schrieb:</p>
<blockquote>
<p>Hallo camper, ich verstehe nicht ganz was du damit meinst, es werden ja keine Parameter übergeben bei der Funktion next(); wie ich dass verstehe. Wenn es Parameter übergeben bekommen hätte, würde es doch z.b. so aussehen &quot; next(int a, int b)&quot; oder nicht?</p>
</blockquote>
<p>Und was meinst du was das <code>this</code> in <code>this.next()</code> ist?<br />
Klar, du schreibst es nicht hin, aber übergeben wird es trotzdem.</p>
<p>Zusätzlich ist noch die Syntax mit der du &quot;next&quot; übergeben willst falsch:</p>
<p>cobb schrieb:</p>
<blockquote>
<pre><code class="language-cpp">StaticArray &lt;Fraction, 12&gt; ArrayFraction;
ArrayFraction.generate(&amp;ArrayFraction[0],&amp;ArrayFraction[12],next());
</code></pre>
</blockquote>
<p><code>next()</code> ist ein Funktionsaufruf, kein Funktionszeiger und auch kein Memberfunktionszeiger.<br />
Memberfunktionszeiger wäre <code>&amp;StaticArray::next</code> .</p>
<p>Deine Probleme stammen grösstenteils daher, dass du auf die etwas komische Idee gekommen bist alles in eine Klasse reinstecken zu müssen. Und halt noch dazu als nicht-statische Member.</p>
<p>In C++ kann man auch Funktionen machen, so ganz ohne Klassen. Nennt man dann freie Funktionen.</p>
<p>In der Aufgabenstellung steht auch nix davon dass du das Array selbst bereitstellen sollst, und schon gar nix davon dass du die Grösse des Arrays beschränken sollst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220484</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 07 Jun 2012 04:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Thu, 07 Jun 2012 04:52:49 GMT]]></title><description><![CDATA[<p>@Hacker<br />
Wo liest du aus der Aufgabenstellung raus dass mit Iteratoren gearbeitet werden soll? Oder dass das Intervall halb-offen ist? Oder dass er allgemeine Funktoren unterstützen soll (da steht ganz Klar Funktionszeiger)?</p>
<p>Aber hauptsache mal was gepostet, nen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220485</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 07 Jun 2012 04:52:49 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Thu, 07 Jun 2012 09:52:00 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>@Hacker<br />
Wo liest du aus der Aufgabenstellung raus dass mit Iteratoren gearbeitet werden soll? Oder dass das Intervall halb-offen ist? Oder dass er allgemeine Funktoren unterstützen soll (da steht ganz Klar Funktionszeiger)?</p>
<p>Aber hauptsache mal was gepostet, nen.</p>
</blockquote>
<p>Lol</p>
<p>Ok, dann pass mal auf.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2470">@Maxi</a>: Hab jetzt den Inhalt von <code>std::generate</code> genommen, aber die Funktion <code>generate</code> an sich gefällt Hustbaer offensichtlich genausowenig wie meine.</p>
<pre><code class="language-cpp">template&lt;typename i_t&gt;
void compute(i_t* start, i_t* end, i_t (*f)())
{
    do 
        *start = f();
    while(start++ != end);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2220498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220498</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 07 Jun 2012 09:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Thu, 07 Jun 2012 08:57:18 GMT]]></title><description><![CDATA[<p>hustbaer, d.h. dass ich am besten die Funktion next() als globale Funktion machen soll und nicht in einer Klasse mit der generat(), verstehe ich dich richtig???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220516</guid><dc:creator><![CDATA[cobb]]></dc:creator><pubDate>Thu, 07 Jun 2012 08:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Thu, 07 Jun 2012 09:45:18 GMT]]></title><description><![CDATA[<p>genau die Funktion sollte global sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220535</guid><dc:creator><![CDATA[demonking]]></dc:creator><pubDate>Thu, 07 Jun 2012 09:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionstemplate und Funktionszeiger on Thu, 07 Jun 2012 09:46:38 GMT]]></title><description><![CDATA[<p>danke demonking, werde ich gleich ausprobieren.....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2220537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2220537</guid><dc:creator><![CDATA[cobb]]></dc:creator><pubDate>Thu, 07 Jun 2012 09:46:38 GMT</pubDate></item></channel></rss>