<?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[Problem mit überladener Methode]]></title><description><![CDATA[<p>Hallo @ALL,</p>
<p>ich sitze grad an einer Klasse und werde bald verzweifeln!! ich habe in meiner Klasse 6 Methoden überladen und habe nun das Problem, dass mir bei jedem Versuch, die 1. der 6 Methoden aufzurufen immer fälschlicher Weise die letzte(6.) mit dem &quot;long&quot; Datentypen aufgerufen wird ???!!!!<br />
hier die 6 Methoden:</p>
<pre><code>[cpp]
public:
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, CMessage _MessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, CMessage* _pMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, string_strMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, int _iMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, double _dMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, long _lMessageToSend);
[/cpp]
</code></pre>
<p>...<br />
igendwo in einer anderen Fkt./Klasse steht folgender Aufruf:</p>
<pre><code>[cpp]
CMessage Message;
...
...
bRetVal = SendMessage(&quot;192.168.178.10&quot;, 5036, Message);
...
...
[/cpp]
</code></pre>
<p>zur Laufzeit wird jedoch die überladene Methode mit dem &quot;long&quot; Parameter aufgerufen!!!! <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>entweder übersehe ich da irgendetwas, oder ich habe einen gravierenden Fehler gemacht...bitte helft mir!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193022/problem-mit-überladener-methode</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 17:27:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193022.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Sep 2007 07:34:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 07:34:48 GMT]]></title><description><![CDATA[<p>Hallo @ALL,</p>
<p>ich sitze grad an einer Klasse und werde bald verzweifeln!! ich habe in meiner Klasse 6 Methoden überladen und habe nun das Problem, dass mir bei jedem Versuch, die 1. der 6 Methoden aufzurufen immer fälschlicher Weise die letzte(6.) mit dem &quot;long&quot; Datentypen aufgerufen wird ???!!!!<br />
hier die 6 Methoden:</p>
<pre><code>[cpp]
public:
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, CMessage _MessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, CMessage* _pMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, string_strMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, int _iMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, double _dMessageToSend);
    bool SendMessage(string _strDestinationIPAddress, int _iDestinationPort, long _lMessageToSend);
[/cpp]
</code></pre>
<p>...<br />
igendwo in einer anderen Fkt./Klasse steht folgender Aufruf:</p>
<pre><code>[cpp]
CMessage Message;
...
...
bRetVal = SendMessage(&quot;192.168.178.10&quot;, 5036, Message);
...
...
[/cpp]
</code></pre>
<p>zur Laufzeit wird jedoch die überladene Methode mit dem &quot;long&quot; Parameter aufgerufen!!!! <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>entweder übersehe ich da irgendetwas, oder ich habe einen gravierenden Fehler gemacht...bitte helft mir!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369875</guid><dc:creator><![CDATA[mr-bigman]]></dc:creator><pubDate>Fri, 21 Sep 2007 07:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 07:49:55 GMT]]></title><description><![CDATA[<p>In welcher Beziehung stehen denn die beiden beteiligten Klassen zueinander? (und hast du eventuell einige der SendMessage()-Methoden in der &quot;anderen Klasse&quot; überschrieben?)</p>
<p>(PS: Was ist eigentlich CMessage?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369884</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 21 Sep 2007 07:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 07:51:10 GMT]]></title><description><![CDATA[<p>mr-bigman schrieb:</p>
<blockquote>
<p>igendwo in einer anderen Fkt./Klasse steht folgender Aufruf:</p>
<pre><code>[cpp]
CMessage Message;
...
...
bRetVal = SendMessage(&quot;192.168.178.10&quot;, 5036, Message);
...
...
[/cpp]
</code></pre>
</blockquote>
<p>Wenn das keine Funktion der Klasse CMessage ist, stellt das allerdings auch mit Sicherheit keinen Aufruf einer Memberfunktion von CMessage dar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369886</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 21 Sep 2007 07:51:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:07:58 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Kurze Vorabbemerkung1: Bezeichner sollten nicht mit &quot;_&quot; anfangen. Da kommt man sich schnell mit Compilerinternen Bezeichnern in die Quere.</p>
<p>Kurze Vorabbemerkung2: Mit cpp-Tags braucht man keine code-Tags mehr <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6695">@Style</a>:</p>
<p>mr-bigman schrieb:</p>
<blockquote>
<p>...ich habe in meiner Klasse 6 Methoden überladen ...</p>
</blockquote>
<p>Das würde ich einfach auch nicht machen. <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 />
Da wird man ja weich, weil man jedesmal die Schnittstelle seiner Klasse ändern muss, sobald ein neuer Typ dazukommt.</p>
<p>Wenn Du schon nicht jedesmal eine Konvertierungsfunktion aufrufen möchtest, würde ich eine entspechende &quot;Zwischenklasse&quot; schreiben (wie heißt eigentlich Deine &quot;Klasse mit SendMessage()&quot; ?):</p>
<pre><code class="language-cpp">public:
    bool SendMessage(string strDestinationIPAddress, int iDestinationPort, SendableObject message);
};

struct SendableObject {
   string message; // Passt alles rein
   SendableObject(string const&amp; s) : message(s) {} // char* brauchst Du dann auch nicht mehr
   SendableObject(CMessage const&amp; MessageToSend); // Pointerversion brauchst DSu auch nicht mehr
   SendableObject(int numberToSend);
   SendableObject(double numberToSend);
   SendableObject(long numberToSend);
};
</code></pre>
<p>Oder mittels templates noch einfacher als:</p>
<pre><code class="language-cpp">struct SendableObject {
   string message; // Passt alles rein
   template &lt;typename T&gt;
   SendableObject(T const&amp; m) {
      ostringstream ost;
      ost &lt;&lt; m;
      message = ost.str();
   }
};
</code></pre>
<p>Damit ist alles konvertierbar, was einen operator&lt;&lt;() definiert hat.</p>
<p>Oder sogar noch direkter kannst Du Deine Klasse von ostream ableiten und entsprechende Funktionen überschreiben. Dann könntest Du &quot;kanonisch auf den Stream&quot; schreiben... (aber das vielleicht erst im nächsten Schritt).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26836">@Topic</a>: Ich kenne leider den Typ &quot;CMessage&quot; nicht, vermute aber, dass im Call nicht wirklich dieser Typ vorliegt (oder nicht wirklich die &quot;long-Version&quot; aufgerufen wird). Eigentlich funktioniert das Overloading in C++ ziemlich zuverlässig.<br />
Lästig wird's eigentlich erst bei impliziten Konvertierungen (via CTor oder Konvertierungsoperatoren) ... da ich mir aber nicht vorstellen kann, dass long einen CMessage-Konvertierungsoperator hat, gehe ich nicht davon aus...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369895</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:13:58 GMT]]></title><description><![CDATA[<p>Die Methoden SendMessage(...) gehören zur Klasse &quot;CUdpIO&quot; und der Aufruf erfolgt natürlich über ein instantiiertes Objekt von &quot;CUdpIO&quot; a al:</p>
<pre><code>[cpp]
...
CUdpIO* pUdpIO = new CUdpIO(...);

bRetVal = pUdpIO-&gt;SendMessage(...);

[/cpp]
</code></pre>
<p>Die Klasse &quot;CMessage&quot; ist ein sog. Transporter-Objekt hier kommen die eigentlichen Nutzdaten und noch zusätzliche Headerinformationen hinein die ich beim Empfang der Nachricht benötige...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369898</guid><dc:creator><![CDATA[mr-bigman]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:18:28 GMT]]></title><description><![CDATA[<p>Und wie stellst du fest, daß die &quot;falsche&quot; Methode aufgerufen wurde?</p>
<p>(btw, ich würde auch Simon's Ansatz vorziehen - gib der Klasse CMessage die nötigen Konstruktoren, um aus einem String oder einer Zahl zusammengebaut zu werden, dann brauchst du nur noch die CMessage-Version der Methode)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369900</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:20:30 GMT]]></title><description><![CDATA[<p>1. ich sehe im Debugger, in welche Methode er gerade hineinspringt und<br />
2. sagen mir das mein Debug-Meldungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369902</guid><dc:creator><![CDATA[mr-bigman]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:20:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:22:51 GMT]]></title><description><![CDATA[<p>mr-bigman schrieb:</p>
<blockquote>
<p>...<br />
Die Klasse &quot;CMessage&quot; ist ein sog. Transporter-Objekt hier kommen die eigentlichen Nutzdaten und noch zusätzliche Headerinformationen hinein die ich beim Empfang der Nachricht benötige...</p>
</blockquote>
<p>Also gerade DAS spricht dafür, CUdpIO nur <em>eine</em> Sendmessage()-Funktion zu verpassen und die Konvertierungen CMessage (hat dann die Funktion, die ich mit &quot;SendableObject&quot; umgesetzt habe) zu überlassen.</p>
<p>Was macht Dein Programm denn, wenn Du CUdpIO die &quot;long-Variante&quot; (oder vielleicht sogar alle außer CMessage) wegnimmst ?<br />
Ach ja: Ich würde auch folgende Signatur verwenden:</p>
<pre><code class="language-cpp">SendMessage(string const&amp; destinationIPAddress, int destinationPort, CMessage const &amp; messageToSend);
</code></pre>
<p>Spart Kopierarbeit (und damit evtl. verbundene Fehler).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369904</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:22:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:27:35 GMT]]></title><description><![CDATA[<p>Wie sehen denn die vollständigen Definitionen von CUdpIO und CMessage sowie der Aufruf von SendMessage exakt aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369907</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:37:29 GMT]]></title><description><![CDATA[<p>also wenn ich die long-Variante entferne, läuft's wie gewünscht. Das ist ja das Ding, ich würde gerne wissen warum sich das Prog so verhält??!<br />
ok, vielen Dank für den Vorschlag mit &quot;SendableObject&quot; etc. ich werde es im Team vorschlagen bzw. hatte soetwas in der Art auch schon implementiert gehabt...aber trotzdem möchte ich gerne herausfinden warum das ganze jetzt SO WIE ES IST nicht läuft? bzw. falsch läuft..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369917</guid><dc:creator><![CDATA[mr-bigman]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 08:48:57 GMT]]></title><description><![CDATA[<p>mr-bigman schrieb:</p>
<blockquote>
<p>...<br />
ok, vielen Dank für den Vorschlag mit &quot;SendableObject&quot; etc. ...</p>
</blockquote>
<p>Naja, eigentlich hast Du das schon und heißt CMessage. <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>
<p>mr-bigman schrieb:</p>
<blockquote>
<p>...aber trotzdem möchte ich gerne herausfinden warum das ganze jetzt SO WIE ES IST nicht läuft? bzw. falsch läuft..</p>
</blockquote>
<p>Zeig doch dazu mal Deinen CMessage-Code (nur die Klassendeklaration).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369927</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit überladener Methode on Fri, 21 Sep 2007 11:23:01 GMT]]></title><description><![CDATA[<p>hallo Simon,<br />
hier ist der Quelltextausschnitt:</p>
<pre><code class="language-cpp">class CMessage
{
public:

    CMessage(enumMESSAGETYPE _MESSAGETYPE = msgEMPTY);
    CMessage(CMessage&amp; _Message);
    ~CMessage(void);
    void Copy(CMessage&amp; _Message);
    CMessage&amp; operator=(CMessage&amp; _MessageToCopy);

private:
...
//Setter/Getter
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1370056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370056</guid><dc:creator><![CDATA[mr-bigman]]></dc:creator><pubDate>Fri, 21 Sep 2007 11:23:01 GMT</pubDate></item></channel></rss>