<?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[Klasse mit Operator() als Funktion übergeben]]></title><description><![CDATA[<p>Gegeben sind folgende Klassen, Funktionen und Header (Ein bisschen gekürzt)</p>
<p>MEMap.h :</p>
<pre><code>class GameMap
	{
	public:
	GameMap(void (*generator)(MapPoint*** ,int* max_x,int* max_y)); 
	~GameMap();

	MapPoint* operator() (int x,int y);	
	void set (Mapobj* ,int x, int y);	
	void clear (Mapobj* , int x, int y);
	int get_xdim(); 
	int get_ydim(); 

	private:/*interessiert vermutlich nicht*
        }
</code></pre>
<p>sowie mein als Testprogramm gedachtes File <a href="http://MysteriesExplorer.cc" rel="nofollow">MysteriesExplorer.cc</a> :</p>
<pre><code>#include &quot;MEvisual.h&quot;
#include &quot;MEMap.h&quot;
#include &quot;MEMapobjects.h&quot;
#include &lt;iostream&gt;
#include &lt;string&gt;

class SingleRoomGenerator
	{
	public:
	SingleRoomGenerator (int x, int y)
		{
		this-&gt;x=x;
		this-&gt;y=y;
		}

	void operator() (MapPoint*** mp, int* dim_x, int* dim_y)
		{
		/*Interessiert vermutlich nicht*/
		}

	private:
	int x;
	int y;
	};

int main()
	{
	SingleRoomGenerator gen(10,10);
	GameMap* gm=new GameMap(&amp;gen);
	GameMapRepresentation gmr=new GameMapRepresentation(gm);
	gmr-&gt;start();
	}
</code></pre>
<p>Die <a href="http://MEMap.cc" rel="nofollow">MEMap.cc</a> (Deren Header ja die MEM.h ist) kompiliert ohne Warnung mit -Wall<br />
Beim Versuch, die <a href="http://MysteriesExplorer.cc" rel="nofollow">MysteriesExplorer.cc</a> zu kompilieren, erhalte ich aber folgende Fehlermeldung:</p>
<pre><code>MysteriesExplorer.cc: In function ‘int main()’:
MysteriesExplorer.cc:43:30: error: no matching function for call to ‘GameMap::GameMap(SingleRoomGenerator*)’
MysteriesExplorer.cc:43:30: note: candidates are:
In file included from MEvisual.h:11:0,
                 from MysteriesExplorer.cc:1:
MEMap.h:49:2: note: GameMap::GameMap(void (*)(MapPoint***, int*, int*))
MEMap.h:49:2: note:   no known conversion for argument 1 from ‘SingleRoomGenerator*’ to ‘void (*)(MapPoint***, int*, int*)’
MEMap.h:41:7: note: GameMap::GameMap(const GameMap&amp;)
MEMap.h:41:7: note:   no known conversion for argument 1 from ‘SingleRoomGenerator*’ to ‘const GameMap&amp;’
</code></pre>
<p>Ich vermute einmal, dass ich nicht in der Lage bin, meine Klasse SingleRoomGenerator als Funktionszeiger zu übergeben. Diese soll aber eigentlich als Funktion wirken (Dazu ist in ihr ja auch der Operator () überladen worden)<br />
Was mache ich aber dabei verkehrt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326534/klasse-mit-operator-als-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 11:22:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326534.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Jun 2014 11:12:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse mit Operator() als Funktion übergeben on Mon, 23 Jun 2014 11:12:47 GMT]]></title><description><![CDATA[<p>Gegeben sind folgende Klassen, Funktionen und Header (Ein bisschen gekürzt)</p>
<p>MEMap.h :</p>
<pre><code>class GameMap
	{
	public:
	GameMap(void (*generator)(MapPoint*** ,int* max_x,int* max_y)); 
	~GameMap();

	MapPoint* operator() (int x,int y);	
	void set (Mapobj* ,int x, int y);	
	void clear (Mapobj* , int x, int y);
	int get_xdim(); 
	int get_ydim(); 

	private:/*interessiert vermutlich nicht*
        }
</code></pre>
<p>sowie mein als Testprogramm gedachtes File <a href="http://MysteriesExplorer.cc" rel="nofollow">MysteriesExplorer.cc</a> :</p>
<pre><code>#include &quot;MEvisual.h&quot;
#include &quot;MEMap.h&quot;
#include &quot;MEMapobjects.h&quot;
#include &lt;iostream&gt;
#include &lt;string&gt;

class SingleRoomGenerator
	{
	public:
	SingleRoomGenerator (int x, int y)
		{
		this-&gt;x=x;
		this-&gt;y=y;
		}

	void operator() (MapPoint*** mp, int* dim_x, int* dim_y)
		{
		/*Interessiert vermutlich nicht*/
		}

	private:
	int x;
	int y;
	};

int main()
	{
	SingleRoomGenerator gen(10,10);
	GameMap* gm=new GameMap(&amp;gen);
	GameMapRepresentation gmr=new GameMapRepresentation(gm);
	gmr-&gt;start();
	}
</code></pre>
<p>Die <a href="http://MEMap.cc" rel="nofollow">MEMap.cc</a> (Deren Header ja die MEM.h ist) kompiliert ohne Warnung mit -Wall<br />
Beim Versuch, die <a href="http://MysteriesExplorer.cc" rel="nofollow">MysteriesExplorer.cc</a> zu kompilieren, erhalte ich aber folgende Fehlermeldung:</p>
<pre><code>MysteriesExplorer.cc: In function ‘int main()’:
MysteriesExplorer.cc:43:30: error: no matching function for call to ‘GameMap::GameMap(SingleRoomGenerator*)’
MysteriesExplorer.cc:43:30: note: candidates are:
In file included from MEvisual.h:11:0,
                 from MysteriesExplorer.cc:1:
MEMap.h:49:2: note: GameMap::GameMap(void (*)(MapPoint***, int*, int*))
MEMap.h:49:2: note:   no known conversion for argument 1 from ‘SingleRoomGenerator*’ to ‘void (*)(MapPoint***, int*, int*)’
MEMap.h:41:7: note: GameMap::GameMap(const GameMap&amp;)
MEMap.h:41:7: note:   no known conversion for argument 1 from ‘SingleRoomGenerator*’ to ‘const GameMap&amp;’
</code></pre>
<p>Ich vermute einmal, dass ich nicht in der Lage bin, meine Klasse SingleRoomGenerator als Funktionszeiger zu übergeben. Diese soll aber eigentlich als Funktion wirken (Dazu ist in ihr ja auch der Operator () überladen worden)<br />
Was mache ich aber dabei verkehrt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405175</guid><dc:creator><![CDATA[Tigerle]]></dc:creator><pubDate>Mon, 23 Jun 2014 11:12:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse mit Operator() als Funktion übergeben on Mon, 23 Jun 2014 11:21:54 GMT]]></title><description><![CDATA[<p>nutze duck-typing:</p>
<pre><code>template&lt;typename CallableT&gt;
GameMap(CallableT Callable);
</code></pre>
<p>nun kannst du funktionszeiger, lambdas und funktoren übergeben. innerhalb des konstruktors behandelst du <code>Callable</code> genau gleich wie <code>generator</code> vorher. du gehst einfach davon aus dass <code>Callable</code> die syntax <code>Callable(...)</code> mit den richtigen argumenten unterstützt. wenn es das nicht tut, dann gibt es eine fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405177</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 23 Jun 2014 11:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse mit Operator() als Funktion übergeben on Mon, 23 Jun 2014 11:25:19 GMT]]></title><description><![CDATA[<p>Und falls du das Funktionsobjekt abspeichern musst, nimm eine Membervariable mit<a href="http://en.cppreference.com/w/cpp/utility/functional/function" rel="nofollow"> <code>std::function</code> </a>, wie <code>std::function&lt;void(MapPoint*** ,int* max_x,int* max_y)&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405178</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 23 Jun 2014 11:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse mit Operator() als Funktion übergeben on Mon, 23 Jun 2014 11:27:58 GMT]]></title><description><![CDATA[<p>Wer hat mich letztens noch einen Drei-Sterne-Programmier genannt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405180</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 23 Jun 2014 11:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse mit Operator() als Funktion übergeben on Mon, 23 Jun 2014 11:53:16 GMT]]></title><description><![CDATA[<p>GameMap kann ich leider nicht generisch entwerfen. Ich habe das Problem, dass ich mehrmals (Wenn auch selten) eine GameMap an derselben Stelle im Programm erstellen will, dies aber mit verschiedenen Generatoren. Damit wäre meine Typisierung zur Laufzeit inkonsistent.</p>
<p>Aber der Tip mit std::function brachte mich auf std::mem_fn.<br />
(Beides Elemente, die ich bis eben noch nicht kannte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )<br />
Damit werde ich es mal versuchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405184</guid><dc:creator><![CDATA[Tigerle]]></dc:creator><pubDate>Mon, 23 Jun 2014 11:53:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse mit Operator() als Funktion übergeben on Mon, 23 Jun 2014 12:00:36 GMT]]></title><description><![CDATA[<p>Tigerle schrieb:</p>
<blockquote>
<p>GameMap kann ich leider nicht generisch entwerfen. Ich habe das Problem, dass ich mehrmals (Wenn auch selten) eine GameMap an derselben Stelle im Programm erstellen will, dies aber mit verschiedenen Generatoren. Damit wäre meine Typisierung zur Laufzeit inkonsistent.</p>
</blockquote>
<p>uhm, nein eigentlich nicht:</p>
<pre><code>std::unique_ptr&lt;GameMap&gt; MyMap;
if(UserInput == 42)
{
	MyMap.reset(new GameMap(GeneratorByFile(&quot;uvw.xyz&quot;))); // Funktor
}
else
{
	MyMap.reset(new GameMap(&amp;GeneratorByAlgorithm)); // Funktion
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2405187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405187</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 23 Jun 2014 12:00:36 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse mit Operator() als Funktion übergeben on Mon, 23 Jun 2014 14:35:12 GMT]]></title><description><![CDATA[<p>Tigerle schrieb:</p>
<blockquote>
<p>GameMap kann ich leider nicht generisch entwerfen. Ich habe das Problem, dass ich mehrmals (Wenn auch selten) eine GameMap an derselben Stelle im Programm erstellen will, dies aber mit verschiedenen Generatoren. Damit wäre meine Typisierung zur Laufzeit inkonsistent.</p>
</blockquote>
<p>Du sollst ja auch nicht die Klasse generisch machen, sondern den Konstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405246</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 23 Jun 2014 14:35:12 GMT</pubDate></item></channel></rss>