<?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[Mekrwürdiger Lambda Error]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen merkwürdigen Fehler, den ich leider nicht erklären kann (daher auch der unpräzise Titel). Ich werde einfach mal meinen Code posten, die Fehlermeldung und ne Beschreibung, was mein Ziel ist:</p>
<pre><code class="language-cpp">typedef void (*ReceiveProc)(const char*, int);
//Prototype of the recv-function: void UdpServer::recv(ReceiveProc recvProc)
// when data is received, the recvProc function is called and the received message and the bytes are transmitted

int main() {
    UdpServer server(1234); // port 1234

    server.start();
    server.recv([&amp;server] (const char* message, int bytes) { // diese Lambda-Funktion wird anscheinend als UdpServer::recv(main()::&lt;lambda(psy::Net::Connection*, const char*, int)&gt;) interpretiert
        server.send(&quot;Deine Nachricht ist angekommen :)&quot;);
        MessageBox(GetForegroundWindow(), message, &quot;&quot;, MB_OK);
    });

    return 0;
}
</code></pre>
<p>Hier die Fehlermeldungen:</p>
<pre><code>C:\Users\psylence\Desktop\C++\Pandorum\server\main.cpp||In function 'int main()':|
C:\Users\psylence\Desktop\C++\Pandorum\server\main.cpp|31|error: no matching function for call to 'psy::Net::UdpServer::recv(main()::&lt;lambda(psy::Net::Connection*, const char*, int)&gt;)'|
C:\Users\psylence\Desktop\C++\Pandorum\server\main.cpp|31|note: candidate is:|
c:\program files\codeblocks\mingw\bin\..\lib\gcc\i686-pc-mingw32\4.7.0\..\..\..\..\include\psy\UdpServer.h|74|note: void psy::Net::UdpServer::recv(psy::Net::ReceiveProc)|
c:\program files\codeblocks\mingw\bin\..\lib\gcc\i686-pc-mingw32\4.7.0\..\..\..\..\include\psy\UdpServer.h|74|note:   no known conversion for argument 1 from 'main()::&lt;lambda(psy::Net::Connection*, const char*, int)&gt;' to 'psy::Net::ReceiveProc {aka void (*)(psy::Net::Connection*, const char*, int)}'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 2 seconds) ===|
</code></pre>
<p>Ich habe Code auskommentiert und entfernt, um dem Fehler auf die Schliche zu kommen und es liegt am übergeben der Referenz des UdpServer-Objekts via [&amp;server].</p>
<p>Danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305302/mekrwürdiger-lambda-error</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 01:09:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305302.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Jun 2012 21:07:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Mon, 25 Jun 2012 21:07:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen merkwürdigen Fehler, den ich leider nicht erklären kann (daher auch der unpräzise Titel). Ich werde einfach mal meinen Code posten, die Fehlermeldung und ne Beschreibung, was mein Ziel ist:</p>
<pre><code class="language-cpp">typedef void (*ReceiveProc)(const char*, int);
//Prototype of the recv-function: void UdpServer::recv(ReceiveProc recvProc)
// when data is received, the recvProc function is called and the received message and the bytes are transmitted

int main() {
    UdpServer server(1234); // port 1234

    server.start();
    server.recv([&amp;server] (const char* message, int bytes) { // diese Lambda-Funktion wird anscheinend als UdpServer::recv(main()::&lt;lambda(psy::Net::Connection*, const char*, int)&gt;) interpretiert
        server.send(&quot;Deine Nachricht ist angekommen :)&quot;);
        MessageBox(GetForegroundWindow(), message, &quot;&quot;, MB_OK);
    });

    return 0;
}
</code></pre>
<p>Hier die Fehlermeldungen:</p>
<pre><code>C:\Users\psylence\Desktop\C++\Pandorum\server\main.cpp||In function 'int main()':|
C:\Users\psylence\Desktop\C++\Pandorum\server\main.cpp|31|error: no matching function for call to 'psy::Net::UdpServer::recv(main()::&lt;lambda(psy::Net::Connection*, const char*, int)&gt;)'|
C:\Users\psylence\Desktop\C++\Pandorum\server\main.cpp|31|note: candidate is:|
c:\program files\codeblocks\mingw\bin\..\lib\gcc\i686-pc-mingw32\4.7.0\..\..\..\..\include\psy\UdpServer.h|74|note: void psy::Net::UdpServer::recv(psy::Net::ReceiveProc)|
c:\program files\codeblocks\mingw\bin\..\lib\gcc\i686-pc-mingw32\4.7.0\..\..\..\..\include\psy\UdpServer.h|74|note:   no known conversion for argument 1 from 'main()::&lt;lambda(psy::Net::Connection*, const char*, int)&gt;' to 'psy::Net::ReceiveProc {aka void (*)(psy::Net::Connection*, const char*, int)}'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 2 seconds) ===|
</code></pre>
<p>Ich habe Code auskommentiert und entfernt, um dem Fehler auf die Schliche zu kommen und es liegt am übergeben der Referenz des UdpServer-Objekts via [&amp;server].</p>
<p>Danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227199</guid><dc:creator><![CDATA[DerCoder]]></dc:creator><pubDate>Mon, 25 Jun 2012 21:07:41 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Mon, 25 Jun 2012 21:33:21 GMT]]></title><description><![CDATA[<p>So wie ich das sehe, wird Dein Lambda-Ausdruck nicht in einen Funktionszeiger konvertiert.</p>
<p>C++11 5.1.2/6 schrieb:</p>
<blockquote>
<p>The closure type for a lambda-expression <strong>with no lambda-capture</strong> has a public non-virtual non-explicit const conversion function to pointer to function having the same parameter and return types as the closure type’s function call operator. The value returned by this conversion function shall be the address of a function that, when invoked, has the same effect as invoking the closure type’s function call operator.</p>
</blockquote>
<p>Tschöö mit ö!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227204</guid><dc:creator><![CDATA[Ö]]></dc:creator><pubDate>Mon, 25 Jun 2012 21:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Mon, 25 Jun 2012 21:41:24 GMT]]></title><description><![CDATA[<p>Okayy, das klingt überaus logisch.</p>
<p>Gibt's da irgendne Möglichkeit, mit der es trotzdem möglich ist, was ich vorhabe (also die server-Referenz per [] zu übergeben)?</p>
<p>Vielleicht mit einer anderen recv(...) Deklaration. Und was müsste dann in den Klammern stehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227205</guid><dc:creator><![CDATA[DerCoder]]></dc:creator><pubDate>Mon, 25 Jun 2012 21:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Mon, 25 Jun 2012 21:53:18 GMT]]></title><description><![CDATA[<p>std::function&lt;void(char const*, int)&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227208</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 25 Jun 2012 21:53:18 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Mon, 25 Jun 2012 23:28:09 GMT]]></title><description><![CDATA[<p>Oder auch</p>
<pre><code class="language-cpp">class server {
    // ...
    template &lt;class F&gt;
    void recv(F f)
    {
       // ...
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2227216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227216</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 25 Jun 2012 23:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Tue, 26 Jun 2012 08:21:08 GMT]]></title><description><![CDATA[<p>error: 'std::function' has not been declared <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=":/"
      alt="😕"
    /></p>
<p>Was muss ich includen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227258</guid><dc:creator><![CDATA[213456789olmnb]]></dc:creator><pubDate>Tue, 26 Jun 2012 08:21:08 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Tue, 26 Jun 2012 08:26:45 GMT]]></title><description><![CDATA[<p><a href="http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&amp;search=std%3A%3Afunction&amp;button=" rel="nofollow">http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&amp;search=std%3A%3Afunction&amp;button=</a></p>
<p>HTH</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227259</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 26 Jun 2012 08:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Tue, 26 Jun 2012 08:42:36 GMT]]></title><description><![CDATA[<p>213456789olmnb schrieb:</p>
<blockquote>
<p>Was muss ich includen?</p>
</blockquote>
<p><code>&lt;functional&gt;</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227262</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 26 Jun 2012 08:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Tue, 26 Jun 2012 09:28:47 GMT]]></title><description><![CDATA[<p>DerCoder schrieb:</p>
<blockquote>
<p>Gibt's da irgendne Möglichkeit, mit der es trotzdem möglich ist, was ich vorhabe (also die server-Referenz per [] zu übergeben)?</p>
<p>Vielleicht mit einer anderen recv(...) Deklaration. Und was müsste dann in den Klammern stehen?</p>
</blockquote>
<p>Da gibt's ne ganze Menge Möglichkeiten. Und die C++igsten hast du hier schon gesehen. In C würde man der Funktion noch einen extra Parameter spendieren, worüber man einen &quot;Zustand&quot; oder &quot;Kontext&quot; transportieren/referenzieren kann, typischerweise ist das ein void-Zeiger:</p>
<pre><code class="language-cpp">typedef void (*Callback)(const char*, int, void*);

void c_funktion(void* user_data, Callback cb)
{
   cb(&quot;test&quot;,42,user_data);
}

int main()
{
   int faktor = 3;
   c_function(&amp;faktor,[](const char* msg, int i, void* context){
      int&amp; faktor = *static_cast&lt;int*&gt;(context);
      cout &lt;&lt; msg &lt;&lt; faktor*i &lt;&lt; endl;
   });
   return 0;
}
</code></pre>
<p>Nicht, dass das jetzt super toll wäre, aber es ist sicherlich auch nicht ganz uninteressant, wenn man mit der einen oder anderen C-API zu tun hat, oder eine C-API selbst anbieten muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227278</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 26 Jun 2012 09:28:47 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Tue, 26 Jun 2012 12:05:50 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">typedef void (*ReceiveProc)(const char*, int);
//Prototype of the recv-function: void UdpServer::recv(ReceiveProc recvProc)
// when data is received, the recvProc function is called and the received message and the bytes are transmitted

int main() {
    UdpServer server(1234); // port 1234

    server.start();
    server.recv([&amp;server] (const char* message, int bytes) { // diese Lambda-Funktion wird anscheinend als UdpServer::recv(main()::&lt;lambda(psy::Net::Connection*, const char*, int)&gt;) interpretiert
        server.send(&quot;Deine Nachricht ist angekommen :)&quot;); //// hier war die Klammerung falsch
        MessageBox(GetForegroundWindow(), message, &quot;&quot;, MB_OK);
    });

    return 0;
}
</code></pre>
</blockquote>
<p>Sollte das nicht:</p>
<pre><code class="language-cpp">typedef void (*ReceiveProc)(const char*, int);
//Prototype of the recv-function: void UdpServer::recv(ReceiveProc recvProc)
// when data is received, the recvProc function is called and the received message and the bytes are transmitted

int main() {
    UdpServer server(1234); // port 1234

    server.start();
    server.recv([&amp;server] (const char* message, int bytes) { 
        server.send(&quot;Deine Nachricht ist angekommen :&quot;)});
        MessageBox(GetForegroundWindow(), message, &quot;&quot;, MB_OK);
    });

    return 0;
}
</code></pre>
<p>sein (also die runde Klammer hinter die Anführungstriche und eine geschweifte Klammer dahinter)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227338</guid><dc:creator><![CDATA[Klammer]]></dc:creator><pubDate>Tue, 26 Jun 2012 12:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to Mekrwürdiger Lambda Error on Tue, 26 Jun 2012 14:39:00 GMT]]></title><description><![CDATA[<p>Danke <sup>.</sup></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2227409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2227409</guid><dc:creator><![CDATA[DerCoder]]></dc:creator><pubDate>Tue, 26 Jun 2012 14:39:00 GMT</pubDate></item></channel></rss>