<?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[Probleme mit Zeigern]]></title><description><![CDATA[<p>hi</p>
<p>ich bräuchte mal etwas Hilfe bei der programmierung einer Funktion. Ich hba dort so meine Probleme mit Zeigern. An sich weiß ich die elementaren Dinge was Zeiger angeht, aber mit der anwendung klappts nicht immer. Hier erstmal der Code von mir:</p>
<pre><code class="language-cpp">void funktion_operandenstellen(wxString eingabefeld, wxString operand, wxString perste_operand);
...
perste_plus=&amp;wxString_plus_stellen[0];
perste_minus=&amp;wxString_minus_stellen[0];
perste_mal=&amp;wxString_mal_stellen[0];
perste_geteilt=&amp;wxString_geteilt_stellen[0];
funktion_operandenstellen(eingabefeld, &quot;+&quot;, *perste_plus);
funktion_operandenstellen(eingabefeld, &quot;-&quot;, *perste_minus);
funktion_operandenstellen(eingabefeld, &quot;*&quot;, *perste_mal);
funktion_operandenstellen(eingabefeld, &quot;/&quot;, *perste_geteilt);
...
void funktion_operandenstellen(wxString eingabefeld, wxString operand,wxString perste_operand)
{
    wxString char_aktuell, stellen_string;
    for (unsigned int stelle=0; stelle&lt;=eingabefeld.Len()+1; stelle++)
    {
        char_aktuell=eingabefeld[stelle];
        if (char_aktuell.Contains(operand))
            {
                stellen_string.Empty();
                stellen_string&lt;&lt;stelle;
                perste_operand=stellen_string;
                *perste_operand++;
            }
    }
}
</code></pre>
<p>ich hatte eig vor die Stellen in einem wxString festzustellenan denene ein bestimmter operand ist. Diese wollte ich dann in einem Array speichern. Ich hatte auch versucht den ganzen Spaß auf dem Heap zu machen, hat aber auch nciht funktioniert.</p>
<p>ich hab das ganzen jetzt nicht bei wxWidgets reingestellt, weil es ja im wesentlichen um Zeiger geht.</p>
<p>ich danke schon einmal im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238528/probleme-mit-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:29:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238528.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Apr 2009 19:47:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Zeigern on Sat, 11 Apr 2009 19:47:42 GMT]]></title><description><![CDATA[<p>hi</p>
<p>ich bräuchte mal etwas Hilfe bei der programmierung einer Funktion. Ich hba dort so meine Probleme mit Zeigern. An sich weiß ich die elementaren Dinge was Zeiger angeht, aber mit der anwendung klappts nicht immer. Hier erstmal der Code von mir:</p>
<pre><code class="language-cpp">void funktion_operandenstellen(wxString eingabefeld, wxString operand, wxString perste_operand);
...
perste_plus=&amp;wxString_plus_stellen[0];
perste_minus=&amp;wxString_minus_stellen[0];
perste_mal=&amp;wxString_mal_stellen[0];
perste_geteilt=&amp;wxString_geteilt_stellen[0];
funktion_operandenstellen(eingabefeld, &quot;+&quot;, *perste_plus);
funktion_operandenstellen(eingabefeld, &quot;-&quot;, *perste_minus);
funktion_operandenstellen(eingabefeld, &quot;*&quot;, *perste_mal);
funktion_operandenstellen(eingabefeld, &quot;/&quot;, *perste_geteilt);
...
void funktion_operandenstellen(wxString eingabefeld, wxString operand,wxString perste_operand)
{
    wxString char_aktuell, stellen_string;
    for (unsigned int stelle=0; stelle&lt;=eingabefeld.Len()+1; stelle++)
    {
        char_aktuell=eingabefeld[stelle];
        if (char_aktuell.Contains(operand))
            {
                stellen_string.Empty();
                stellen_string&lt;&lt;stelle;
                perste_operand=stellen_string;
                *perste_operand++;
            }
    }
}
</code></pre>
<p>ich hatte eig vor die Stellen in einem wxString festzustellenan denene ein bestimmter operand ist. Diese wollte ich dann in einem Array speichern. Ich hatte auch versucht den ganzen Spaß auf dem Heap zu machen, hat aber auch nciht funktioniert.</p>
<p>ich hab das ganzen jetzt nicht bei wxWidgets reingestellt, weil es ja im wesentlichen um Zeiger geht.</p>
<p>ich danke schon einmal im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694595</guid><dc:creator><![CDATA[SpiGAndromeda]]></dc:creator><pubDate>Sat, 11 Apr 2009 19:47:42 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sat, 11 Apr 2009 21:17:50 GMT]]></title><description><![CDATA[<p>Wo genau ist denn das Problem?</p>
<p>Ich würde mal sagen, dass du irgendetwas mit Zeigern basteln willst, ohne, dass du überhaupt Zeiger brauchst:</p>
<pre><code class="language-cpp">perste_plus=&amp;wxString_plus_stellen[0];
perste_minus=&amp;wxString_minus_stellen[0];
perste_mal=&amp;wxString_mal_stellen[0];
perste_geteilt=&amp;wxString_geteilt_stellen[0];
</code></pre>
<p>Das scheint so, als ob du probierst einen string zu &quot;kopieren&quot;, indem du die Addresse des ersten Elementes des stringes umhängen möchtest.. Ich kenne wxString jetzt nicht, aber ich denke mal, dass da ein <code>operator =</code> überladen ist und man das ganz normal zuweisen können sollte. Da etwas mit Low Level zu mischen wäre einfach nur unsauber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694619</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 11 Apr 2009 21:17:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sat, 11 Apr 2009 22:09:06 GMT]]></title><description><![CDATA[<p>naja der punkt ist ich wollte wissen wie ich das am besten schriebe, dass ich die wxStrings in dem Array direkt verändern möchte. Ich bekomm das aber mit dem übergeben von Zeigern etc. einfach nciht anständgig auf die Reihe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694635</guid><dc:creator><![CDATA[SpiGAndromeda]]></dc:creator><pubDate>Sat, 11 Apr 2009 22:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sat, 11 Apr 2009 22:19:19 GMT]]></title><description><![CDATA[<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="😕"
    /><br />
Ich verstehe immernoch nicht, was du meinst..</p>
<p>Sag konkret im Code, was dir Mühe bereitet und wo das Problem liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694637</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 11 Apr 2009 22:19:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sun, 12 Apr 2009 17:07:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void funktion_operandenstellen(wxString eingabefeld, wxString operand, wxString perste_operand);
</code></pre>
<p>Was in aller Welt ist ein perste? Nundenn, du verwendest <em>perste_operand</em> als Zeiger innerhalb der Funktion. Du deklarierst es jedoch als reguläres Objekt (call by value). Hier wird eine Kopie des Objektes angelegt.</p>
<p>Wenn du perste_operand wirklich als veränderliches Objekt übergeben willst, dann musst du dies per call by reference/pointer tun. Wobei hier die Referenz (sofern möglich - hier ist es der Fall) vorziehen solltest:</p>
<pre><code class="language-cpp">void funktion_operandenstellen(wxString const&amp; eingabefeld, wxString const&amp; operand, wxString&amp; perste_operand);
</code></pre>
<p>BWBG schrieb:</p>
<blockquote>
<p>Wobei hier eingabefeld und operand <em>konstante</em> Referenzen sind (d.h. nicht verändert werden können).</p>
</blockquote>
<p><strong>Edit</strong>: Hier habe ich sprachlich schwer daneben gehauen - siehe Anmerkung von Nexus weiter unten.</p>
<p>wxString bietet sicherlich (wie std::string::at(size_t) oder std::string::operator[](size_t)) eine Methode für den Zugriff auf ein einzelnes Zeichen an.</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694640</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Sun, 12 Apr 2009 17:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sun, 12 Apr 2009 06:45:15 GMT]]></title><description><![CDATA[<p>perste_operand bzw. perste_plus.... ist ein zeiger auf das erste Objekt eines wxString Arrays.</p>
<p>das nächste Problem hab ich dann noch mit der Zeigerarithmetik</p>
<p>ich dächte eigentlich, dass man Zeiger inkrementieren kann, aber ich bekomme einen Compilerfehler ausgegeben in folgender Zeile:</p>
<pre><code class="language-cpp">perste_operand++;
</code></pre>
<p>der Fehler lautet:<br />
no `operator++(int)' declared for postfix `++', trying prefix operator instead<br />
no match for 'operator++' in '++perste_operand'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694670</guid><dc:creator><![CDATA[SpiGAndromeda]]></dc:creator><pubDate>Sun, 12 Apr 2009 06:45:15 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sun, 12 Apr 2009 06:50:35 GMT]]></title><description><![CDATA[<p>am besten gebe ich gleich mal den wichtigen Teil vom Code komplett</p>
<pre><code class="language-cpp">int funktion_operandenstellen_anzahl(wxString eingabefeld, wxString operand);
void funktion_operandenstellen(wxString eingabefeld, wxString operand, wxString&amp; perste_operand);
</code></pre>
<pre><code class="language-cpp">void TaschenrechnerDlg::Event_Taste_istgleich(wxCommandEvent&amp; event)
{
    int anzahl_plus, anzahl_minus, anzahl_mal, anzahl_geteilt;
    wxString eingabefeld, stellen_plus, stellen_minus, stellen_mal, stellen_geteilt;
    wxString *perste_plus, *perste_minus, *perste_mal, *perste_geteilt;
    eingabefeld=WxEdit1-&gt;GetValue();
    anzahl_plus=funktion_operandenstellen_anzahl(eingabefeld, &quot;+&quot;);
    anzahl_minus=funktion_operandenstellen_anzahl(eingabefeld, &quot;-&quot;);
    anzahl_mal=funktion_operandenstellen_anzahl(eingabefeld, &quot;*&quot;);
    anzahl_geteilt=funktion_operandenstellen_anzahl(eingabefeld, &quot;/&quot;);
    wxString wxString_plus_stellen[anzahl_plus];
    wxString wxString_minus_stellen[anzahl_minus];
    wxString wxString_mal_stellen[anzahl_mal];
    wxString wxString_geteilt_stellen[anzahl_geteilt];
    perste_plus=&amp;wxString_plus_stellen[0];
    perste_minus=&amp;wxString_minus_stellen[0];
    perste_mal=&amp;wxString_mal_stellen[0];
    perste_geteilt=&amp;wxString_geteilt_stellen[0];
    funktion_operandenstellen(eingabefeld, &quot;+&quot;, *perste_plus);
    funktion_operandenstellen(eingabefeld, &quot;-&quot;, *perste_minus);
    funktion_operandenstellen(eingabefeld, &quot;*&quot;, *perste_mal);
    funktion_operandenstellen(eingabefeld, &quot;/&quot;, *perste_geteilt);
}

int funktion_operandenstellen_anzahl(wxString eingabefeld, wxString operand)
{
    wxString char_aktuell, stellen_string;
    for (unsigned int stelle=0; stelle&lt;=eingabefeld.Len()+1; stelle++)
    {
        char_aktuell=eingabefeld[stelle];
        if (char_aktuell.Contains(operand))
            {
                if (stelle&lt;10)
                {
                    stellen_string&lt;&lt;0;
                }
                stellen_string&lt;&lt;stelle;
            }
    }
    return stellen_string.Len()/2;
}

void funktion_operandenstellen(wxString eingabefeld, wxString operand,wxString&amp; perste_operand)
{
    wxString char_aktuell, stellen_string;
    for (unsigned int stelle=0; stelle&lt;=eingabefeld.Len()+1; stelle++)
    {
        char_aktuell=eingabefeld[stelle];
        if (char_aktuell.Contains(operand))
            {
                stellen_string.Empty();
                stellen_string&lt;&lt;stelle;
                perste_operand=stellen_string;
                perste_operand++;
            }
    }
}
</code></pre>
<p>wenns an dem ganzen Code noch was zu beanstanden ist...<br />
jede konstruktive Kritik hilft mir besser zu werde, also immer her damit<br />
auch wenns um programmierstil etc. geht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694671</guid><dc:creator><![CDATA[SpiGAndromeda]]></dc:creator><pubDate>Sun, 12 Apr 2009 06:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sun, 12 Apr 2009 09:49:22 GMT]]></title><description><![CDATA[<p>Wie gesagt. Ich sehe hier auch nirgends eine Benutzung von Zeigern. Du übergibst alles <strong>per Copy</strong>.</p>
<p>Das hier sollte wahrscheinlich eher so aussehen:</p>
<pre><code class="language-cpp">int funktion_operandenstellen_anzahl(wxString* eingabefeld, wxString* operand)
</code></pre>
<p>Das kannst du jetzt nicht einfach so übernehemen, sondern musst auch verstehen, was das Problem ist und den Rest des Codes anpassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694700</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 12 Apr 2009 09:49:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Zeigern on Sun, 12 Apr 2009 11:30:30 GMT]]></title><description><![CDATA[<p>martin.bens schrieb:</p>
<blockquote>
<p>jede konstruktive Kritik hilft mir besser zu werde, also immer her damit<br />
auch wenns um programmierstil etc. geht</p>
</blockquote>
<p>Nur was zur Funktion <code>Event_Taste_istgleich()</code> : Ich finde die sehr unübersichtlich. Vielleicht lohnt es sich, sie in mehrere Funktionen aufzuteilen, oder mindestens die Variablen gleich bei der Deklaration zu initialisieren. Ausserdem scheint es mir, dass du die 4 Operatoren generischer verwalten könntest, sodass du von der jeweils 4-fachen Codeduplizierung wegkommst. Eine Möglichkeit wäre eventuell <code>std::map</code> .</p>
<p>bwbg schrieb:</p>
<blockquote>
<p>Wobei hier eingabefeld und operand <em>konstante</em> Referenzen sind (d.h. nicht verändert werden können).</p>
</blockquote>
<p>Referenzen sind <em>immer</em> konstant und können <em>nie</em> verändert werden. Das <code>const</code> bezieht sich nicht auf die Referenz, sondern das referenzierte Objekt. Das bedeutet, über die Const-Referenz darfst du das Objekt nicht manipulieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694747</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 12 Apr 2009 11:30:30 GMT</pubDate></item></channel></rss>