<?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[Funktionszeiger]]></title><description><![CDATA[<p>Hey,</p>
<p>ich versuch mich grad an nem Funktionszeiger, aber das will nicht so wie ich das will. Ich hab eine Klasse CUtils, die einige Methoden zur Verfügung stellt, die andere Klassen benutzen können. Eine dieser Methoden soll als Parameter einen Funktionszeiger bekommen, der dann in der Methode aufgerufen wird. Das Ganze sieht so aus:</p>
<pre><code class="language-cpp">typedef void (*FileHandler)(const char*);

class CUtils{	
public:
    static void searchJPGFiles(const char* path, bool searchSubDir, FileHandler callback);		
};

void CUtils::searchJPGFiles(const char* path, bool searchSubDir, FileHandler callback){
    string tmpPath = &quot;&quot;;
    /*...*/
    callback(tmpPath.c_str());
    /*...*/
}
</code></pre>
<p>Jetz möchste ich diese Funktion in eine meiner Klassen nutzen:</p>
<pre><code class="language-cpp">void CexifDataInput::inputCamModelFileHandler(const char *path){
    /*...*/
}

void CexifDataInput::inputCamModel(string &amp;camModel){
    /*...*/
    CUtils::searchJPGFiles(((Mode2Data*)m_inputData-&gt;modeData)-&gt;source.c_str(), m_inputData-&gt;searchSubDir, inputCamModelFileHandler);
    /*...*/
}
</code></pre>
<p>Das funktioniert aber so nicht und es er spuckt mir folgenden Fehler aus:</p>
<pre><code>cannot convert ‘void (CexifDataInput::*)(const char*)’ to ‘void (*)(const char*)’ in initialization
</code></pre>
<p>Wenn inputCamModelFileHandler eine normale Methode ist, und nicht zur Klasse CexifDataInput gehört, dann funktioniert der Code, sobald inputCamModelFileHandler eine Methode der Klasse ist funktioniert es nicht mehr. Wie kann ich das beheben?</p>
<p>MfG &amp; Thx Bergmann</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289068/funktionszeiger</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 08:53:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289068.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Jun 2011 01:05:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 01:05:39 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich versuch mich grad an nem Funktionszeiger, aber das will nicht so wie ich das will. Ich hab eine Klasse CUtils, die einige Methoden zur Verfügung stellt, die andere Klassen benutzen können. Eine dieser Methoden soll als Parameter einen Funktionszeiger bekommen, der dann in der Methode aufgerufen wird. Das Ganze sieht so aus:</p>
<pre><code class="language-cpp">typedef void (*FileHandler)(const char*);

class CUtils{	
public:
    static void searchJPGFiles(const char* path, bool searchSubDir, FileHandler callback);		
};

void CUtils::searchJPGFiles(const char* path, bool searchSubDir, FileHandler callback){
    string tmpPath = &quot;&quot;;
    /*...*/
    callback(tmpPath.c_str());
    /*...*/
}
</code></pre>
<p>Jetz möchste ich diese Funktion in eine meiner Klassen nutzen:</p>
<pre><code class="language-cpp">void CexifDataInput::inputCamModelFileHandler(const char *path){
    /*...*/
}

void CexifDataInput::inputCamModel(string &amp;camModel){
    /*...*/
    CUtils::searchJPGFiles(((Mode2Data*)m_inputData-&gt;modeData)-&gt;source.c_str(), m_inputData-&gt;searchSubDir, inputCamModelFileHandler);
    /*...*/
}
</code></pre>
<p>Das funktioniert aber so nicht und es er spuckt mir folgenden Fehler aus:</p>
<pre><code>cannot convert ‘void (CexifDataInput::*)(const char*)’ to ‘void (*)(const char*)’ in initialization
</code></pre>
<p>Wenn inputCamModelFileHandler eine normale Methode ist, und nicht zur Klasse CexifDataInput gehört, dann funktioniert der Code, sobald inputCamModelFileHandler eine Methode der Klasse ist funktioniert es nicht mehr. Wie kann ich das beheben?</p>
<p>MfG &amp; Thx Bergmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085203</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 01:05:39 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 01:17:36 GMT]]></title><description><![CDATA[<p>Ganz allgemein wirds leider häßlich. Und Callbacks sollen vermutlich ganz allgemein bleiben.<br />
<a href="http://www.c-plusplus.net/forum/245670" rel="nofollow">http://www.c-plusplus.net/forum/245670</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085206</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 28 Jun 2011 01:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 11:43:06 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>das is in der Tat ziemlich hässlich. Ich habs jetzt anders gelöst. Ich hab ein Interface geschrieben, das jede Klasse die die Suche ausführt implementieren muss. Das geht hier zum Glück, da jede Klasse nur eine Methode hat, die nach der Suche aufgerufen werden muss. Wären es mehrere Methoden dann würd ich wohl um diese hässliche Lösung nicht drum rum kommen ^^</p>
<p>MfG &amp; Thx Bergmann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085355</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 11:43:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 12:12:08 GMT]]></title><description><![CDATA[<p>Bergmann89 schrieb:</p>
<blockquote>
<p>Hey,</p>
<p>das is in der Tat ziemlich hässlich. Ich habs jetzt anders gelöst. Ich hab ein Interface geschrieben, das jede Klasse die die Suche ausführt implementieren muss. Das geht hier zum Glück, da jede Klasse nur eine Methode hat, die nach der Suche aufgerufen werden muss. Wären es mehrere Methoden dann würd ich wohl um diese hässliche Lösung nicht drum rum kommen ^^</p>
</blockquote>
<p>Wieso? Dann hätte das Interface eben 2 oder mehr pur virtuelle Methoden, die implementiert werden müssen <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/2085379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085379</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Jun 2011 12:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 12:21:42 GMT]]></title><description><![CDATA[<p>Was genau ist an <code>std::function</code> hässlich? Das Template ist ziemlich mächtig und hat auch eine angenehme Syntax.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085388</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 28 Jun 2011 12:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 12:35:35 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>: das geht eben nich so einfach, weil dann die search-Methode nicht weis, welche Methode des Interfaces sie aufrufen muss. Da müsste mann dann noch nen Parameter oder so mitgeben um das zu lösen.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: in den Links oben hab ich nix von std:funktion gesehen, oder ich hab da noch was nich ganz verstanden ^^</p>
<p>MfG Bergmann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085397</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 12:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 12:40:47 GMT]]></title><description><![CDATA[<p>Bergmann89 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>: das geht eben nich so einfach, weil dann die search-Methode nicht weis, welche Methode des Interfaces sie aufrufen muss. Da müsste mann dann noch nen Parameter oder so mitgeben um das zu lösen.</p>
</blockquote>
<p>Dann hab ich dich wohl missverstanden. Ich dachte du meinst, dass evtl. an mehreren Stellen in deiner Funktion callbacks aufgerufen werden müssen, also quasi Callback1 bis CallbackN. Dann müsste dein Interface eben N Methoden haben, und die Funtion sähe so aus:</p>
<pre><code class="language-cpp">void doSomething(Arg..., interface* if)
{
  /* . do 1 . */
  if-&gt;Callback1(xy);

  /* ... */
  if-&gt;Callback2(yz); 

  /* usw */
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2085401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085401</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Jun 2011 12:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 12:44:10 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ne die Methode Search sucht nach JPGs im übergebenen Ordner und soll ein Callback aufrufen, wenn eine JPG gefunden wurde. Wenn jetzt eine Klasse mehrere Methoden mit Suchanfragen hat, dann brauch sie auch mehrere Methoden die die gefundenen Datein auswertet. Und dann weis die Search-Methode nicht welche Interface-Methode sie aufrufen soll...</p>
<p>MfG Bergmann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085404</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 12:44:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 12:51:43 GMT]]></title><description><![CDATA[<p>Bergmann89 schrieb:</p>
<blockquote>
<p>ne die Methode Search sucht nach JPGs im übergebenen Ordner und soll ein Callback aufrufen, wenn eine JPG gefunden wurde. Wenn jetzt eine Klasse mehrere Methoden mit Suchanfragen hat, dann brauch sie auch mehrere Methoden die die gefundenen Datein auswertet.</p>
</blockquote>
<p>Nö. sie braucht nur eine Callbackmethode, die im Zweifel anhand einer Klassenvariable rausfinden kann, welche &quot;version&quot; des callbacks denn grade gemeint ist.</p>
<p>/edit: allerdings kommt mir das Design etwas spanisch vor. Kannst du mal einen etwas weiteren Überblick geben, wer da was macht bei deinen Klassen/objekten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085407</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Jun 2011 12:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 13:02:05 GMT]]></title><description><![CDATA[<p>Mach ein Template aus der Funktion, und gib nen beliebigen Funktor mit.<br />
Oder verwende std::function.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085410</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Jun 2011 13:02:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 13:02:35 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich hab ne Klasse Utils, die stellt verschiedene Methoden zur Verfügung die vom Programm in allen Bereichen heufig benutzt wird. Darunter auch die searchJPGFiles-Methode.<br />
Dann hab ich eine Klasse die sich um die Dateneingabe kümmert, mit einem Menü. In dem Menü kann der User allerhand Sachen einstellen nach denen gesucht werden soll, bzw. welche JPGs bearbeitet werden sollen. Dort kann er z.B ein CameraModel festlegen mit der die JPGs aufgenommen wurden. Wenn er das Model aber nicht 100%tig weis, dann wird eine Suche in dem Ordner gestartet und alle CameraModele aus den exif-Daten der JPGs ausgelesen und dem User angezeigt. Die Suche übernimmt natürlich die searchJPGFiles-Methode und die Auswertung der Daten soll dann die Callback-Methode machen.<br />
Weiterhin gibt es eine Klasse, die die gewünschten Operationen dann ausführt. Die startet auch eine Suche über die searchJPGFiles-Methode und führt in ihrer Callback-Funktion die gewünschten Aktionen aus (Datein umbennen, kopieren, verschieben, ...).<br />
So ist die Suche universell einsetzbar und kann über die Callbacks von fast jeders Methode genutzt werden. Nur leider gingen die Callbacks nich so wie ich wollte (oder ich habs noch nich verstanden) und deshalb bin ich notgedrungen auf ein Interface umgestiegen...</p>
<p>MfG Bergmann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085411</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 13:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 13:16:58 GMT]]></title><description><![CDATA[<p>Ich hätte das etwas weiter aufgebröselt:</p>
<ol>
<li>searchJPGs macht genau was der Name sagt - es <em>sucht</em> nur die jpgs und gibt einen Container voller Dateihandles/Referenzen (in welcher Form auch immer, vielleicht auch nur filenamen) zurück.</li>
<li>Über das Ergebnis wird iteriert, und zwar mit einem Funktor, der solch ein Filehandle nimmt und damit *irgendwas* macht. Das *irgendwas* kann eben öffnen + kamerainfo lesen sein, oder öffnen + bearbeiten etc.</li>
</ol>
<p>Wenn du Dateien immer öffnest und was tust, kannst du das erreichen, indem du den Funktor in schritt 2 aus einem Fileopener + Fileprocessor zusammensetzt - wobei der Fileprocessor wieder generisch irgendein Funktor sein kann, der auf eine geöffnete jpg-Datei losgelassen wird. Templates lassen grüßen <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="😉"
    /><br />
Auf jeden Fall würde ich die Kopplung durch das Interface und Ableitungen etc. möglichst vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085416</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Jun 2011 13:16:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 13:30:37 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>das mit den Functoren hab ich gecheckt (denke ich). Diese Seite hat mir sehr dabei geholfen: <a href="http://www.newty.de/fpt/functor.html" rel="nofollow">http://www.newty.de/fpt/functor.html</a><br />
Jetz würd ich aber gern noch wissen wie das mit dem std:function geht. Meine IDE (CodeLite) zeigt mit das bei der Codevervollständigung an, aber der Compiler (GNU G++) sagt folgendes:</p>
<pre><code>error: ‘function’ in namespace ‘std’ does not name a type
</code></pre>
<p><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>
<p>MfG Bergmann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085420</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 13:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 13:33:03 GMT]]></title><description><![CDATA[<p>Dann kennt dein Compiler std::function noch nicht (ist Teil des TR1 bzw. auch des neuen C++ Standards).<br />
Verwende derweilen einfach std::tr1::function oder boost::function.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085421</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Jun 2011 13:33:03 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 13:34:25 GMT]]></title><description><![CDATA[<p>function gibts erst ab C++0x in der standardbibliothek. wird z.B. von MSVC2010 und gcc 4.6 (?) unterstützt. Alternativ kannst du vorher boost.function benutzen. (google hilft da weiter) <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/2085423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085423</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Jun 2011 13:34:25 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 13:58:09 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich hab g++ 4:4.5.2-1ubuntu3. std::tr1::function gibts auch nicht. Sin die auch erst ab v4.6 dabei? Die Boost-Librarie wollt ich umgehen, da ich das ganze noch meinem Prof schicken muss und da sind haufen extra Libs nich so gut.<br />
Ich werd jetzt auch die Functoren mit nem Template nutzen. Ich wollt halt nur rein Intresse halber wissen, warum er das mit den functions bei mir net findet...</p>
<p>MfG Bergmann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085438</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 13:58:09 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 14:21:41 GMT]]></title><description><![CDATA[<p>Bergmann89 schrieb:</p>
<blockquote>
<p>ich hab g++ 4:4.5.2-1ubuntu3. std::tr1::function gibts auch nicht. Sin die auch erst ab v4.6 dabei? Die Boost-Librarie wollt ich umgehen, da ich das ganze noch meinem Prof schicken muss und da sind haufen extra Libs nich so gut.</p>
</blockquote>
<p>die boost libraries sind fast standard. Frag am Besten deinen Prof, ob er sie hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085453</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Jun 2011 14:21:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 21:46:06 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>das mit den Functoren un den Templates läuft jetzt. Jetzt hab ich nur noch eine kleine Frage. Und zwar hab ich den Code des Templates vollständig im Header unter gebracht. Dort arbeitet er auch. Aber sobald ich den eigentlichen Code in der <em>.cpp unterbringen will schmeißt er mir cryptische Fehler aus.<br />
So sieht der Code aus (</em>.h):</p>
<pre><code class="language-cpp">class IFileHandlerFunctor{
public:
	virtual void operator()(const char* path) = 0;
	virtual void call(const char* path) = 0;	
};

template &lt;class TClass&gt; class TFileHandlerCallbackFunctor: public IFileHandlerFunctor{
private:
	void (TClass::*_callback)(const char*);
	TClass *_obj;

public:
	virtual void operator()(const char* path){
		(*_obj.*_callback)(path);
	};

	virtual void call(const char* path){
		(*_obj.*_callback)(path);
	};

	TFileHandlerCallbackFunctor(TClass *obj, void(TClass::*callback)(const char*)){
		_obj = obj;
		_callback = callback;
	};
};
</code></pre>
<p>das hab ich probiert (*.cpp, natürlich die *.h vorher angepasst):</p>
<pre><code class="language-cpp">template&lt;class TClass&gt; void TFileHandlerCallbackFunctor&lt;TClass&gt;:: operator()(const char* path){
	(*_obj.*_callback)(path);
}

template&lt;class TClass&gt; void TFileHandlerCallbackFunctor&lt;TClass&gt;::call(const char* path){
	(*_obj.*_callback)(path);
}

/**Konstruktor
 * @obj: Objekt das die Callback Methode besitzt
 * @callback: Funktionszeiger auf Callback-Methode des Objekts 
template&lt;class TClass&gt; TFileHandlerCallbackFunctor&lt;TClass&gt;::TFileHandlerCallbackFunctor(TClass* obj, void(TClass::*callback)(const char*)){
	_obj = obj;
	_callback = callback;
}
</code></pre>
<p>Fehler: Die Template-Klasse an sich lässt sich ohne Probleme compilieren, doch wenn ich das Ganze dann auch benutzen will kommt dieser Fehler:</p>
<pre><code>undefined reference to `TFileHandlerCallbackFunctor&lt;TexifDataInput&gt;::TFileHandlerCallbackFunctor(TexifDataInput*, void (TexifDataInput::*)(char const*))'
</code></pre>
<p>So sieht der Aufruf zu dem Fehler aus:</p>
<pre><code class="language-cpp">TFileHandlerCallbackFunctor&lt;TexifDataInput&gt; callback(this, &amp;TexifDataInput::searchJPGFileHandler);
TUtils::searchJPGFiles(((Mode2Data*)_inputData-&gt;modeData)-&gt;source.c_str(), _inputData-&gt;searchSubDir, &amp;callback);
</code></pre>
<p>Das seltsame is, das dieser Code funktioniert, wenn ich den Code ausschließlich in die *.h schribe. Sobald ich ihn in die *.cpp packe (wo er ja normalerweise stehen sollte) meckert er rum -.-<br />
Kann sich das jmd erklären?</p>
<p>MfG Bergmann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085763</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 21:46:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 21:52:47 GMT]]></title><description><![CDATA[<p>Bergmann89 schrieb:</p>
<blockquote>
<p>Das seltsame is, das dieser Code funktioniert, wenn ich den Code ausschließlich in die *.h schribe. Sobald ich ihn in die *.cpp packe (wo er ja normalerweise stehen sollte) meckert er rum -.-<br />
Kann sich das jmd erklären?</p>
</blockquote>
<p>Diese Regel gilt für normale Funktionen, allerdings nicht für Templates. Bei einem Template muß der Compiler die komplette Definition sehen wenn er es instanziiert (im Hauptprogramm) - und das geht nur, wenn die Definition direkt im Header steht.<br />
(eine Alternative wäre noch eine .impl Datei, die du am Ende des Headers einbindest)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085767</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 28 Jun 2011 21:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Tue, 28 Jun 2011 22:05:35 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>wenn das so üblich is, dann lass ich das im Header. Ich wollt dann bloß kein Punktabzug bekommen, weil ich mich nich an die Styleregeln gehalten hab.<br />
Damit wären dann alle Fargen beseitigt. Danke an alle für die Mühe <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>
<p>MfG &amp; Thx Bergmann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2085777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2085777</guid><dc:creator><![CDATA[Bergmann89]]></dc:creator><pubDate>Tue, 28 Jun 2011 22:05:35 GMT</pubDate></item></channel></rss>