<?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[Warum ist der Pointer nicht NULL?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>warum funktioniert der Code trotz der auskommentierten Zeile? Müsste der Pointer nicht NULL sein?</p>
<p>Ausgabe: Hey</p>
<p>ButtonClick:</p>
<pre><code class="language-cpp">virtual void OnButton1Click(wxCommandEvent&amp; event)
{
	Body aaa;

	aaa.SetSuper(&quot;Toll&quot;);

	//aaa.SetCool(new Fuss());

	aaa.GetCool()-&gt;SetHolla(&quot;Hey&quot;);

	StaticText1-&gt;SetLabel(aaa.GetCool()-&gt;GetHolla());
}
</code></pre>
<p>Body.h</p>
<pre><code class="language-cpp">#ifndef __Body__
#define __Body__

#include &lt;Fuss.h&gt;

class Body
{
	private:
		wxString _Super;
		Fuss* _Cool;

	public:
		wxString GetSuper()
		{
			return _Super;
		}

		void SetSuper(wxString parSuper)
		{
			_Super = parSuper;
		}

	public:
		Fuss* GetCool()
		{
			return _Cool;
		}

		void SetCool(Fuss* parCool)
		{
			_Cool = parCool;
		}
};

#endif // __Body__
</code></pre>
<p>Fuss.h</p>
<pre><code class="language-cpp">#ifndef __Fuss__
#define __Fuss__

class Fuss
{
	private:
		wxString _Holla;

	public:
		wxString GetHolla()
		{
			return _Holla;
		}

		void SetHolla(wxString parHolla)
		{
			_Holla = parHolla;
		}

};

#endif // __Fuss__
</code></pre>
<p>Mit freundlichen Grüßen,<br />
DarkBug</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308900/warum-ist-der-pointer-nicht-null</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 23:37:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308900.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Oct 2012 09:34:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Wed, 10 Oct 2012 07:28:46 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>warum funktioniert der Code trotz der auskommentierten Zeile? Müsste der Pointer nicht NULL sein?</p>
<p>Ausgabe: Hey</p>
<p>ButtonClick:</p>
<pre><code class="language-cpp">virtual void OnButton1Click(wxCommandEvent&amp; event)
{
	Body aaa;

	aaa.SetSuper(&quot;Toll&quot;);

	//aaa.SetCool(new Fuss());

	aaa.GetCool()-&gt;SetHolla(&quot;Hey&quot;);

	StaticText1-&gt;SetLabel(aaa.GetCool()-&gt;GetHolla());
}
</code></pre>
<p>Body.h</p>
<pre><code class="language-cpp">#ifndef __Body__
#define __Body__

#include &lt;Fuss.h&gt;

class Body
{
	private:
		wxString _Super;
		Fuss* _Cool;

	public:
		wxString GetSuper()
		{
			return _Super;
		}

		void SetSuper(wxString parSuper)
		{
			_Super = parSuper;
		}

	public:
		Fuss* GetCool()
		{
			return _Cool;
		}

		void SetCool(Fuss* parCool)
		{
			_Cool = parCool;
		}
};

#endif // __Body__
</code></pre>
<p>Fuss.h</p>
<pre><code class="language-cpp">#ifndef __Fuss__
#define __Fuss__

class Fuss
{
	private:
		wxString _Holla;

	public:
		wxString GetHolla()
		{
			return _Holla;
		}

		void SetHolla(wxString parHolla)
		{
			_Holla = parHolla;
		}

};

#endif // __Fuss__
</code></pre>
<p>Mit freundlichen Grüßen,<br />
DarkBug</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2258400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2258400</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Wed, 10 Oct 2012 07:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Tue, 09 Oct 2012 10:01:12 GMT]]></title><description><![CDATA[<p>Das ist im besten Fall undefiniertes Verhalten...</p>
<p>Der Pointer ist nur dann 0(NULL) wenn du ihn auch mit 0 initialisierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2258407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2258407</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Tue, 09 Oct 2012 10:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Wed, 10 Oct 2012 07:25:49 GMT]]></title><description><![CDATA[<p>Ok, danke. Im ButtonClickEventHandler habe ich die Auskommentierung wieder rückgängig gemacht und der Klasse Body habe ich den folgenden Konstruktor hinzugefügt:</p>
<pre><code class="language-cpp">public:
	Body()
	{
		_Cool = NULL;
	}
</code></pre>
<p>Ist es möglich anstelle des Pointers _Cool ein normales Objekt der Klasse Fuss zu verwenden? Wenn ja, wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2258707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2258707</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Wed, 10 Oct 2012 07:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Wed, 10 Oct 2012 07:53:10 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u1652" rel="nofollow">phlox81</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f51" rel="nofollow">Andere GUIs - Qt, GTK+, wxWidgets</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x und C++11)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2258719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2258719</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 10 Oct 2012 07:53:10 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Wed, 10 Oct 2012 08:33:57 GMT]]></title><description><![CDATA[<p>Klar ist das möglich. Schreib halt Fuss statt Fuss*.</p>
<p>Übrigens: Dein Code verwendet Bezeichner, die für die Implementierung (also den Compiler und die Standardbibliothek) reserviert sind. Alles, was __ enthält oder mit _ und einem Großbuchstaben beginnt, darfst du nicht benutzen, und im globalen Scope außerdem alles andere nicht, was mit einem Unterstrich beginnt. Das heißt</p>
<pre><code class="language-cpp">#ifndef __Body__ // &lt;-- FEHLER!
#define __Body__

#include &lt;Fuss.h&gt;

class Body
{
    private:
        wxString _Super; // &lt;-- FEHLER!
        Fuss* _Cool;     // &lt;-- Gleicher Fehler!

...
</code></pre>
<p>von den oben beschriebenen Regeln abgesehen bist du in deiner Bezeichnerwahl allerdings frei, also gibt es viele Wege, das aufzulösen. Ich hätte</p>
<pre><code class="language-cpp">#ifndef INCLUDED_MYLIB_BODY_H
#define INCLUDED_MYLIB_BODY_H

#include &quot;Fuss.h&quot; // lokaler Header

class Body
{
  private:
    wxString super_;
    Fuss     cool_;

...
</code></pre>
<p>geschrieben, wobei MYLIB ein eindeutiger Bezeichner für das betreffende Projekt wäre. Andere Leute haben andere Vorlieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2258738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2258738</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 10 Oct 2012 08:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Fri, 12 Oct 2012 11:24:24 GMT]]></title><description><![CDATA[<p>Wenn ich Fuss* durch Fuss ersetze, kompiliert das Programm zwar, jedoch ist die Ausgabe nicht wie erwartet &quot;Hey&quot;, sondern &quot;&quot;. Hier mein Quellcode:</p>
<p>ButtonClick:</p>
<pre><code class="language-cpp">virtual void OnButton1Click(wxCommandEvent&amp; event)
{
	Body aaa;

	aaa.SetSuper(&quot;Toll&quot;);

	aaa.GetCool().SetHolla(&quot;Hey&quot;);

	StaticText1-&gt;SetLabel(aaa.GetCool().GetHolla());
}
</code></pre>
<p>Body.h</p>
<pre><code class="language-cpp">#ifndef __Body__
#define __Body__

#include &lt;Fuss.h&gt;

class Body
{
	private:
		wxString _Super;
		Fuss _Cool;

	public:
		wxString GetSuper()
		{
			return _Super;
		}

	public:
		void SetSuper(wxString parSuper)
		{
			_Super = parSuper;
		}

	public:
		Fuss GetCool()
		{
			return _Cool;
		}

	public:
		void SetCool(Fuss parCool)
		{
			_Cool = parCool;
		}
};

#endif // __Body__
</code></pre>
<p>Fuss.h</p>
<pre><code class="language-cpp">#ifndef __Fuss__
#define __Fuss__

class Fuss
{
	private:
		wxString _Holla;

	public:
		wxString GetHolla()
		{
			return _Holla;
		}

	public:
		void SetHolla(wxString parHolla)
		{
			_Holla = parHolla;
		}
};

#endif // __Fuss__
</code></pre>
<p>Den Include Guard habe ich dem wxFormBuilder entnommen, dieser macht dies genauso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259601</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Fri, 12 Oct 2012 11:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Fri, 12 Oct 2012 11:35:20 GMT]]></title><description><![CDATA[<p>Stichwort: Referenzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2259610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2259610</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 12 Oct 2012 11:35:20 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Mon, 15 Oct 2012 09:43:59 GMT]]></title><description><![CDATA[<p>Ist das nur mit Referenzen möglich? Zeige mir bitte am Codebeispiel, wie diese korrekt eingesetzt werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2260590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260590</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Mon, 15 Oct 2012 09:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Mon, 15 Oct 2012 10:31:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Body
{
    //....
    public:
        Fuss GetCool()  // retourniert eine Kopie von _Cool
        {
            return _Cool;
        }

        // stattdessen:

        Fuss&amp; GetCool()  // retourniert eine Referenz auf _Cool
        {
            return _Cool;
        }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2260619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2260619</guid><dc:creator><![CDATA[BeispielWieBestellt]]></dc:creator><pubDate>Mon, 15 Oct 2012 10:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 18 Oct 2012 08:44:20 GMT]]></title><description><![CDATA[<p>Danke!<br />
Sehe ich es richtig, das man immer Referenzen benutzen sollte und nie Kopien bei Methodenaufrufen?</p>
<p>Foo.h</p>
<pre><code class="language-cpp">#ifndef __Foo__
#define __Foo__

class Foo
{
	private:
		wxString Test;

	public:
		void SetTest(wxString&amp; inTest)
		{
			Test = inTest;
		}

	public:
		wxString&amp; GetTest()
		{
			return Test;
		}
};

#endif
</code></pre>
<p>EventHandler:</p>
<pre><code class="language-cpp">virtual void OnButton1Click(wxCommandEvent&amp; event)
		{
			Foo Blau;
			Blau.SetTest(&quot;WessenBlau&quot;);

			Button1-&gt;SetLabel(Blau.GetTest());
		}
</code></pre>
<p>Der Compiler scheint das &amp; bei SetTest nicht zu mögen. Warum?<br />
Fehler: keine passende Funktion für Aufruf von »Foo::SetTest(const char [13])«</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261573</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Thu, 18 Oct 2012 08:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 18 Oct 2012 09:00:22 GMT]]></title><description><![CDATA[<p>DarkBug schrieb:</p>
<blockquote>
<p>Sehe ich es richtig, das man immer Referenzen benutzen sollte und nie Kopien bei Methodenaufrufen?</p>
</blockquote>
<p>Nein, siehst du nicht richtig. Man sollte den Unterschied kennen und immer wissen, was man braucht. Außerdem solltest du dich mit der Bedeutung von <code>const</code> vertraut machen - davon fehlen ein oder mehrere in deinem Code.</p>
<blockquote>
<p>Foo.h</p>
<pre><code class="language-cpp">#ifndef __Foo__
#define __Foo__
</code></pre>
</blockquote>
<p>Schau nochmal, was seldon oben geschrieben hat. __Foo__ ist ein reservierter Bezeichner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261578</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 18 Oct 2012 09:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 18 Oct 2012 09:07:18 GMT]]></title><description><![CDATA[<p>DarkBug schrieb:</p>
<blockquote>
<p>Sehe ich es richtig, das man immer Referenzen benutzen sollte und nie Kopien bei Methodenaufrufen?</p>
</blockquote>
<p>Ja, jedoch nur unter der Bedingung, dass eine Kopie teurer ist, als eine Referenzübergabe. Bei fundamentalen Typen und bei Typen, deren Größen im Bereich eines fundamentalen Typs liegen, nimmst du call-by-value, da eine Kopie hier billiger ist. Sprich <code>sizeof(object)&lt;=12</code> call-by-value, ansonsten call-by-ref.</p>
<p>DarkBug schrieb:</p>
<blockquote>
<p>Der Compiler scheint das &amp; bei SetTest nicht zu mögen. Warum?<br />
Fehler: keine passende Funktion für Aufruf von »Foo::SetTest(const char [13])«</p>
</blockquote>
<p><code>Blau.SetTest(&quot;WessenBlau&quot;);</code> erzeugt ein temporäres Objekt. Temporäre Objekte darfst du nur an eine const-ref binden. <code>SetTest(const wxString&amp; inTest)</code> Abgesehen davon, man verwendet eigentlich immer const-ref. Das, das du momentan hast, wird in einem anderen Kontext verwendet, nämlich für out-Parameter. out-Parameter ermöglichen dir eine beliebige Anzahl return-Werte. In deinem Fall willst du aber keinen return-Wert, darum const-ref.</p>
<p>Und noch was, doppelte Unterstriche sind glaube ich nicht erlaubt. <code>__Foo__</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2261580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2261580</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 18 Oct 2012 09:07:18 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Fri, 19 Oct 2012 10:24:07 GMT]]></title><description><![CDATA[<p>Okay, ich habe mir nun mal das Schlüsselwort const angeschaut.</p>
<p>const &amp; für primitive Datentypen wie wxString, wxInt32, wxDouble etc.<br />
keinen zusatz für normale Klassen wie wxButton, wxFrame, wxSocketBase etc.<br />
Wenn ja warum nicht auch const &amp;?</p>
<p>&amp; wenn die Methode das Objekt an der Aufrufstelle verändern soll<br />
* wenn die Methode das Objekt an der Aufrufstelle verändern soll<br />
und/oder wenn auf NULL geprüft werden muss<br />
sowie eventuell das Objekt gewechselt werden soll</p>
<p>Stimmt das so?</p>
<p>Referenzen muss man nicht wie Pointer mit delete irgendwie löschen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262004</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Fri, 19 Oct 2012 10:24:07 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Fri, 19 Oct 2012 10:42:10 GMT]]></title><description><![CDATA[<p>DarkBug schrieb:</p>
<blockquote>
<p>Stimmt das so?</p>
</blockquote>
<p>Es ist egal welche Typen im Spiel sind, das kann man so nicht verallgemeinern. Wenn Du einen wxButton &quot;ohne Zusatz&quot; übergibst, wird das Objekt kopiert, was entweder schiefgeht (wenn wxWidgets so vernünftig programmiert ist, dass sich Widgets nicht kopieren lassen) oder garantiert nicht das macht, was Du möchtest. const-reference Übergabe macht überall dort Sinn, wo ein Objekt nicht verändert werden soll, aber nicht kopiert werden kann oder die Kopie zu aufwändig ist. Und was ist mit einem &quot;primitiven Datentypen&quot;, der an der aufgerufenen Stelle verändert werden soll?</p>
<p>EDIT:<br />
Ich versuche mal, ein paar mögliche Szenarien sinnvoll zu umreissen.</p>
<pre><code>kein Qualifizierer   Ursprungsobjekt soll nicht verändert werden UND ( Kopie ist
                     erwünscht ODER die Kopie unaufwändig, z.B. für int, char, 
                     short, ... )
const &amp;              Objekt soll nicht verändert werden UND ( Objekt ist nicht
                     kopierbar ODER die Kopie unerwünsch oder aufwändig, z.B.
                     wxString, wxButton, ... )
&amp;                    Objekt soll verändert werden (Hier ein Hinweis: Man kann
                     auch Objekte, zu denen nur ein Zeiger existiert per 
                     Referenz übergeben, indem man sie dereferenziert. Man kann
                     auch Zeiger per Referenz übergeben, wenn man &amp; und * kom-
                     biniert
*                    Spezialfälle  :p
</code></pre>
<blockquote>
<p>Referenzen muss man nicht wie Pointer mit delete irgendwie löschen, oder?</p>
</blockquote>
<p>Du musst weder Referenzen noch Pointer mit delete löschen, sondern per new erstellte Objekte. Dass deren Adressen häufig in Pointern gespeichert werden, ist eine andere Sache. Aber auch hier hängt's vom Anwendungsfall ab. Wenn Du z.B. einen Pointer auf ein Objekt bekommst, welches Dir nicht gehört, solltest Du das mit dem Löschen tunlist bleiben lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262006</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 19 Oct 2012 10:42:10 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Mon, 22 Oct 2012 07:47:29 GMT]]></title><description><![CDATA[<p>Danke für deine Mühe!<br />
Du sagst keinen Qualifizierer für z.B. int, char oder short. Also anscheinend für alle primitiven Datentypen. Zählt da auch std::string bzw. wxString dazu?</p>
<p>Wenn dem so ist, würdest du in meinem Beispiel keine Referenzen und auch keine Pointer verwenden, korrekt?</p>
<p>Foo.h</p>
<pre><code class="language-cpp">#ifndef Foo_
#define Foo_

class Foo
{
    private:
        wxString Test;

    public:
        void SetTest(wxString inTest)
        {
            Test = inTest;
        }

    public:
        wxString GetTest()
        {
            return Test;
        }
};

#endif // Foo_
</code></pre>
<p>EventHandler:</p>
<pre><code class="language-cpp">virtual void OnButton1Click(wxCommandEvent&amp; event)
{
    Foo Blau;
    Blau.SetTest(&quot;WessenBlau&quot;);

    Button1-&gt;SetLabel(Blau.GetTest());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2262689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262689</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Mon, 22 Oct 2012 07:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Mon, 22 Oct 2012 09:58:57 GMT]]></title><description><![CDATA[<p>Zeichenketten sind keine primitiven Typen und hinzu kommt noch, dass man in der Regel nicht weiß, wie lang sie sind (der Kopieraufwand kann also beliebig groß werden). Daher würde ich Zeichenketten nie durch Kopie weitergeben, außer ich brauche aus irgendeinem Grund unbedingt eine Kopie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262778</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 22 Oct 2012 09:58:57 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 25 Oct 2012 08:19:21 GMT]]></title><description><![CDATA[<p>Ok.</p>
<p>Foo.h</p>
<pre><code class="language-cpp">#ifndef Foo_ 
#define Foo_ 

class Foo 
{ 
    private: 
        wxString Test; 

    public: 
        void SetTest(const wxString&amp; inTest) 
        { 
            Test = inTest;
        } 

    public: 
        wxString GetTest() 
        { 
            return Test; 
        } 
}; 

#endif // Foo_
</code></pre>
<p>In Zeile 12 wird der Wert der Referenz in die Variable Test gespeichert, oder wird nur die Referenz irgendwie kopiert?</p>
<p>Wie benutze ich const bei GetTest? const wxString&amp; macht hier ja keinen Sinn, da der Rückgabestring ja eh nicht verändert werden kann, die Membervariable aber schon. Wie verhindere ich das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263792</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Thu, 25 Oct 2012 08:19:21 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 25 Oct 2012 11:12:56 GMT]]></title><description><![CDATA[<p>DarkBug schrieb:</p>
<blockquote>
<p>In Zeile 12 wird der Wert der Referenz in die Variable Test gespeichert, oder wird nur die Referenz irgendwie kopiert?</p>
</blockquote>
<p>Ersteres.</p>
<blockquote>
<p>Wie benutze ich const bei GetTest? const wxString&amp; macht hier ja keinen Sinn,</p>
</blockquote>
<p>Doch!</p>
<blockquote>
<p>da der Rückgabestring ja eh nicht verändert werden kann,</p>
</blockquote>
<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="😕"
    /> Häh? Warum nicht?</p>
<blockquote>
<p>die Membervariable aber schon. Wie verhindere ich das?</p>
</blockquote>
<p>Siehe oben. Außerdem sollte die ganze Methode gleich mit const sein. Also:</p>
<pre><code class="language-cpp">const wxString&amp; GetTest() const
{
 return Test;
}
</code></pre>
<p>(Disclaimer: Alles unter der Voraussetzung, dass wxstring eine halbwegs &quot;normale&quot; Semantik hat. Bei diesen GUI-Frameworks weiß man ja nie…)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263867</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 25 Oct 2012 11:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 25 Oct 2012 13:30:34 GMT]]></title><description><![CDATA[<p>Das const nach der Methode heißt, das in dieser Methode keine Klassenvariablen verändert werden können, oder?<br />
Während des return-Vorgangs kann die Variable doch nicht verändert werden. Nur vor dem return in der Methode und nachher vom Aufrufer der Methode.</p>
<p>Also würde ein</p>
<pre><code class="language-cpp">wxString&amp; GetTest() const
{
 return Test;
}
</code></pre>
<p>doch reichen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263923</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Thu, 25 Oct 2012 13:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 25 Oct 2012 14:05:54 GMT]]></title><description><![CDATA[<p>Nein, denn dann könnte Test schließlich vom Aufrufer über die Referenz verändert werden. Irgendwie habe ich das Gefühl, du hast Referenzen noch überhaupt nicht verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263936</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 25 Oct 2012 14:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 25 Oct 2012 16:09:19 GMT]]></title><description><![CDATA[<p>Jetzt habe ich das soweit verstanden.</p>
<p>Das const rechts von einer Methode verhindert, das man in dieser Methode keine Membervariablen verändern kann, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2263996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2263996</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Thu, 25 Oct 2012 16:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Thu, 25 Oct 2012 16:44:26 GMT]]></title><description><![CDATA[<p>Ja. Es muss außerdem beachtet werden, dass innerhalb dieser Methode keine Methode aufgerufen werden darf, die nicht const-qualifiziert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2264008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2264008</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Thu, 25 Oct 2012 16:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Wed, 31 Oct 2012 11:20:43 GMT]]></title><description><![CDATA[<p>Gut. Ich habe meinen Code nun soweit angepasst. Ist das so nun korrekt?</p>
<p>Foo.h</p>
<pre><code class="language-cpp">#ifndef __Foo__
#define __Foo__

class Foo
{
	private:
		wxString Test;

	public:
		void SetTest(const wxString&amp; inTest)
		{
			Test = inTest;
		}

	public:
		const wxString&amp; GetTest() const
		{
			return Test;
		}
};

#endif
</code></pre>
<p>App.cpp</p>
<pre><code class="language-cpp">#ifdef WX_PRECOMP
#include &quot;wx_pch.h&quot;
#endif

#ifdef __BORLANDC__
#pragma hdrstop
#endif

#include &lt;wx/wx.h&gt;

#include &quot;MainFrame.h&quot;

class App : public wxApp
{
    public: virtual bool OnInit()
    {
        MainFrame* mfMainFrame = new MainFrame(0L);
        mfMainFrame-&gt;SetIcon(wxICON(MainIcon));
        mfMainFrame-&gt;Show();

        return true;
    }
};

IMPLEMENT_APP(App);
</code></pre>
<p>MainFrame.h</p>
<pre><code class="language-cpp">///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep  8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO &quot;NOT&quot; EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////

#ifndef __MainFrame__
#define __MainFrame__

#include &lt;wx/string.h&gt;
#include &lt;wx/button.h&gt;
#include &lt;wx/gdicmn.h&gt;
#include &lt;wx/font.h&gt;
#include &lt;wx/colour.h&gt;
#include &lt;wx/settings.h&gt;
#include &lt;wx/sizer.h&gt;
#include &lt;wx/frame.h&gt;

#include &quot;Foo.h&quot;

///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
/// Class MainFrame
///////////////////////////////////////////////////////////////////////////////
class MainFrame : public wxFrame
{
	private:

	protected:
		wxButton* Button1;

		virtual void OnButton1Click(wxCommandEvent&amp; event)
		{
			Foo Blau;
			wxString Eins = &quot;Eins&quot;;
			wxString Zwei = &quot;&quot;;

			Blau.SetTest(Eins);
			Zwei = Blau.GetTest();

			Button1-&gt;SetLabel(Zwei);
		}

	public:

		MainFrame(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString&amp; title = wxEmptyString, const wxPoint&amp; pos = wxDefaultPosition, const wxSize&amp; size = wxSize(500,300), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL);
		~MainFrame();

};

#endif //__MainFrame__
</code></pre>
<p>MainFrame.cpp</p>
<pre><code class="language-cpp">///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Sep  8 2010)
// http://www.wxformbuilder.org/
//
// PLEASE DO &quot;NOT&quot; EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////

#include &quot;MainFrame.h&quot;

///////////////////////////////////////////////////////////////////////////

MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString&amp; title, const wxPoint&amp; pos, const wxSize&amp; size, long style ) : wxFrame( parent, id, title, pos, size, style )
{
	this-&gt;SetSizeHints( wxDefaultSize, wxDefaultSize );

	wxBoxSizer* BoxSizer1;
	BoxSizer1 = new wxBoxSizer( wxVERTICAL );

	Button1 = new wxButton( this, wxID_ANY, wxT(&quot;MyButton&quot;), wxDefaultPosition, wxDefaultSize, 0 );
	BoxSizer1-&gt;Add( Button1, 0, wxALL, 5 );

	this-&gt;SetSizer( BoxSizer1 );
	this-&gt;Layout();

	this-&gt;Centre( wxBOTH );

	// Connect Events
	Button1-&gt;Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::OnButton1Click ), NULL, this );
}

MainFrame::~MainFrame()
{
	// Disconnect Events
	Button1-&gt;Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::OnButton1Click ), NULL, this );

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2265883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265883</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Wed, 31 Oct 2012 11:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Mon, 26 Nov 2012 11:17:17 GMT]]></title><description><![CDATA[<p>*push*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274745</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Mon, 26 Nov 2012 11:17:17 GMT</pubDate></item><item><title><![CDATA[Reply to Warum ist der Pointer nicht NULL? on Mon, 26 Nov 2012 12:50:42 GMT]]></title><description><![CDATA[<p>Dein Foo.h sieht, bis auf den reservierten Bezeichner &quot;__Foo__&quot;, gut aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2274765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2274765</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 26 Nov 2012 12:50:42 GMT</pubDate></item></channel></rss>