<?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 string?!]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche eine Funktion aufzurufen, der ein const wchar_t* übergeben werden muss...</p>
<pre><code class="language-cpp">screen-&gt;SettemplateName(L&quot;Welcome&quot;);
widestr = screen-&gt;GettemplateName();
const wchar_t* widecstr = widestr-&gt;c_str();

wstring widestr2 = L&quot;Welcome&quot;;
const wchar_t* widecstr2 = widestr2.c_str();

meth(widecstr2); 
meth(widecstr); //funktioniert nicht
</code></pre>
<p>Hier noch die Definition der templateName:</p>
<pre><code class="language-cpp">wstring* templateName;
void SettemplateName(wstring templateNameNew);
wstring* GettemplateName();

void HMIScreen::SettemplateName(wstring templateNameNew)
{
	templateName = &amp;templateNameNew;
}
wstring* HMIScreen::GettemplateName()
{
	return templateName;
}
</code></pre>
<p>Der Aufruf der Methode mit widecstr2 funktioniert, aber mit widecstr nicht. Der Compiler motzt aber nicht beim Erstellen. Das Programm bleibt jedoch an der Stelle hängen (ohne Fehlermeldung) bzw. es bricht die Methode (ohne Ergebnis?!) ab.</p>
<p>Der Unterschied zwischen den beiden liegt ja eigentlich nur in der Herkunft des wchar... deswegen verstehe ich nicht, warum es nicht funktioniert. Leider kann ich durch Anhalten des Programms nicht den Inhalt von widecstr anzeigen lassen (Ich vermute einen Bug meines Compilers?!).</p>
<p>lg<br />
absolut_nooby</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279163/problem-mit-string</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 17:20:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279163.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Dec 2010 10:14:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 10:14:10 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich versuche eine Funktion aufzurufen, der ein const wchar_t* übergeben werden muss...</p>
<pre><code class="language-cpp">screen-&gt;SettemplateName(L&quot;Welcome&quot;);
widestr = screen-&gt;GettemplateName();
const wchar_t* widecstr = widestr-&gt;c_str();

wstring widestr2 = L&quot;Welcome&quot;;
const wchar_t* widecstr2 = widestr2.c_str();

meth(widecstr2); 
meth(widecstr); //funktioniert nicht
</code></pre>
<p>Hier noch die Definition der templateName:</p>
<pre><code class="language-cpp">wstring* templateName;
void SettemplateName(wstring templateNameNew);
wstring* GettemplateName();

void HMIScreen::SettemplateName(wstring templateNameNew)
{
	templateName = &amp;templateNameNew;
}
wstring* HMIScreen::GettemplateName()
{
	return templateName;
}
</code></pre>
<p>Der Aufruf der Methode mit widecstr2 funktioniert, aber mit widecstr nicht. Der Compiler motzt aber nicht beim Erstellen. Das Programm bleibt jedoch an der Stelle hängen (ohne Fehlermeldung) bzw. es bricht die Methode (ohne Ergebnis?!) ab.</p>
<p>Der Unterschied zwischen den beiden liegt ja eigentlich nur in der Herkunft des wchar... deswegen verstehe ich nicht, warum es nicht funktioniert. Leider kann ich durch Anhalten des Programms nicht den Inhalt von widecstr anzeigen lassen (Ich vermute einen Bug meines Compilers?!).</p>
<p>lg<br />
absolut_nooby</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997064</guid><dc:creator><![CDATA[absolut_nooby]]></dc:creator><pubDate>Mon, 20 Dec 2010 10:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 10:24:27 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void HMIScreen::SettemplateName(wstring templateNameNew)
{
    templateName = &amp;templateNameNew; // templateName zeigt auf templateNameNew
} // templateNameNew ist jetzt gelöscht. Wo zeigt templateName jetzt hin?
</code></pre>
<p>Willst du da eine Kopie machen, oder tatsächlich auf irgendeinen anderen String zeigen. Dann:</p>
<pre><code class="language-cpp">void HMIScreen::SettemplateName(wstring&amp; templateNameNew)
{
    templateName = &amp;templateNameNew;
}
</code></pre>
<p>Aber vermutlich willst du eigentlich eher</p>
<pre><code class="language-cpp">class WasWeisIch
{
wstring templateName;

void SettemplateName(const wstring&amp; templateNameNew)
{
    templateName = templateNameNew;
}
const wstring&amp; GettemplateName() const
{
    return templateName;
} 
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1997068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997068</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 20 Dec 2010 10:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 11:57:43 GMT]]></title><description><![CDATA[<p>Ich habe gerade versucht diese Schreibweise in meinem C++ Buch zu finden... leider erfolglos <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=":'("
      alt="😢"
    /></p>
<p>Was heißt denn wstring&amp; (genauer gesagt das &amp; nach einer Klasse)? Gibt es dafür vllt einen &quot;Suchbegriff&quot; unter dem ich was in meinem Buch finden kann?</p>
<p>lg absolut_nooby</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997128</guid><dc:creator><![CDATA[absolut_nooby]]></dc:creator><pubDate>Mon, 20 Dec 2010 11:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 11:59:20 GMT]]></title><description><![CDATA[<p>absolut_nooby schrieb:</p>
<blockquote>
<p>Gibt es dafür vllt einen &quot;Suchbegriff&quot; unter dem ich was in meinem Buch finden kann?</p>
</blockquote>
<p>Referenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997130</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 20 Dec 2010 11:59:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 12:00:07 GMT]]></title><description><![CDATA[<p>absolut_nooby schrieb:</p>
<blockquote>
<p>Ich habe gerade versucht diese Schreibweise in meinem C++ Buch zu finden... leider erfolglos <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=":'("
      alt="😢"
    /></p>
</blockquote>
<p>Unfassbar. Welches Buch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997131</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 20 Dec 2010 12:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 12:38:39 GMT]]></title><description><![CDATA[<p>Das Buch ist von Bjarne Stroustrup: Einführung in die Programmierung mit C++.</p>
<p>Mit dem Suchbegriff Referenz ist auf jeden Fall der erste Teil geklärt... aber der 2. teil ist mir noch nicht so ganz klar:</p>
<pre><code class="language-cpp">const wstring&amp; GettemplateName() const
{
    return templateName;
}
</code></pre>
<p>Heißt das, das ich durch den Aufruf der Funktion eine Referenz (in Form eines Zeigers) zurückgegeben bekomme, die constant (und damit nicht veränderbar ist)? Es wird also keine Kopie erstellt und damit kann ich den Wert nicht verändern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997152</guid><dc:creator><![CDATA[absolut_nooby]]></dc:creator><pubDate>Mon, 20 Dec 2010 12:38:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 12:44:12 GMT]]></title><description><![CDATA[<p>Ja richtig. Möchtest du den wert änderbar machen fügr ein</p>
<pre><code class="language-cpp">wstring&amp; GettemplateName()
{
    return templateName;
}
</code></pre>
<p>dazu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997154</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 20 Dec 2010 12:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Mon, 20 Dec 2010 12:56:07 GMT]]></title><description><![CDATA[<p>absolut_nooby schrieb:</p>
<blockquote>
<p>Das Buch ist von Bjarne Stroustrup: Einführung in die Programmierung mit C++.</p>
</blockquote>
<p>Das sollte übrigens in Kapitel 8.5 stehen, sofern die deutsche Ausgabe nicht großartig anders ist als die englische.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997166</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 20 Dec 2010 12:56:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Tue, 21 Dec 2010 15:50:38 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>bezüglich dieser pass-by-reference Thematik:</p>
<p>Wenn ich eine Referenz übergebe wird ja keine Kopie meiner Variablen erstellt. Falls ich jedoch nicht pass-by- reference benutze wird ja dann folgendermaßen eine Kopie erstellt.<br />
Bei Standard Datentypen ist das ja ok. Aber wie wird denn eine Kopie meiner eigenen Klasse erstellt? Brauche ich dafür eine Copy- Methode oder geht das automatisch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997644</guid><dc:creator><![CDATA[absolut_nooby]]></dc:creator><pubDate>Tue, 21 Dec 2010 15:50:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Tue, 21 Dec 2010 15:56:08 GMT]]></title><description><![CDATA[<p>absolut_nooby schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>bezüglich dieser pass-by-reference Thematik:</p>
<p>Wenn ich eine Referenz übergebe wird ja keine Kopie meiner Variablen erstellt. Falls ich jedoch nicht pass-by- reference benutze wird ja dann folgendermaßen eine Kopie erstellt.<br />
Bei Standard Datentypen ist das ja ok. Aber wie wird denn eine Kopie meiner eigenen Klasse erstellt? Brauche ich dafür eine Copy- Methode oder geht das automatisch?</p>
</blockquote>
<p>Wenn du keine Copy-Methode (genannt Kopierkonstruktor) hast, wird automatisch einer erzeugt. Dieser ruft einfach den Kopierkonstruktor aller Membervariablen auf. Dies ist oft das was man will, so dass man diesen Konstruktor nicht selber schreiben braucht.<br />
Gleiches gilt für Zuweisungsoperator, Destruktor und Standardkonstruktor, die ebenfalls alle automatisch erzeugt werden wenn man sie nicht selber schreibt (Ausnahme beim Standardkonstruktor: Es darf überhaupt kein anderer Konstruktor vorhanden sein).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997646</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 21 Dec 2010 15:56:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Tue, 21 Dec 2010 16:05:30 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>... (Ausnahme beim Standardkonstruktor: Es darf überhaupt kein anderer Konstruktor vorhanden sein).</p>
</blockquote>
<p>Will heissen: Sobald du einen eigenen Konstruktor angibst, wird kein Konstruktor mehr vom compiler erstellt. Unter einem Standardkonstruktor versteht man einen Konstruktor, der ohne Argumente aufgerufen werden kann. Dies kann also durchaus ein parametrisierter Konstruktor sein, wenn für die Parameter default-Werte angegeben werden.</p>
<p>Beim automatisch erstellten Konstruktor wird allerdings immer nur eine flat-copy gemacht. Will heissen, wenn deine Klasse pointer als member hat, so werden nur die Pointer kopiert. Die Pointer beider Objekte zeigen nach dem Kopiervorgang auf den gleichen Speicherbereich (meist eine schlechte Idee).<br />
Dies wäre ein Fall, in dem du lieber einen eigenen angeben solltest um eine deep-copy zu erstellen. Du würdest also Speicher allozieren, die entsprechenden Werte kopieren und den pointer des neu erstellten (also der Kopie) Objektes auf den von dir allozierten Speicher zeigen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997647</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Tue, 21 Dec 2010 16:05:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Tue, 21 Dec 2010 16:10:29 GMT]]></title><description><![CDATA[<p>Und wenn wir schon dabei sind, sollte man noch folgende wichtige Faustregel nennen: Wenn dir der Defaultdestruktor, Default-Copy-Konstruktor oder der Default-Zuweisungsoperator nicht ausreichen, dann gilt das in der Regel auch für die jeweils anderen aus dieser Liste.</p>
<p>Und jetzt bist du vermutlich total verwirrt :xmas2: .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997651</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 21 Dec 2010 16:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Tue, 21 Dec 2010 16:33:35 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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997662</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 21 Dec 2010 16:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Wed, 22 Dec 2010 07:07:53 GMT]]></title><description><![CDATA[<p>Um ehrlich zu sein, bin ich nun schon ein bischen verwirrt. Aber dieses Problem umgehe ich, in dem ich einfach überall pass-by-reference oder pass-by-const-ref anwende ;-).</p>
<p>Falls ich dann doch mal ne Kopie brauche, muss ich mir das nochmal genauer anschauen ;-).</p>
<p>Gibt es da wiedermal einen &quot;Suchbegriff&quot; für?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997817</guid><dc:creator><![CDATA[absolut_nooby]]></dc:creator><pubDate>Wed, 22 Dec 2010 07:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string?! on Wed, 22 Dec 2010 07:30:25 GMT]]></title><description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/Dreierregel_%28C%2B%2B%29" rel="nofollow">http://de.wikipedia.org/wiki/Dreierregel_(C%2B%2B)</a><br />
<a href="http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-and-swap" rel="nofollow">http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-and-swap</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997820</guid><dc:creator><![CDATA[havvun]]></dc:creator><pubDate>Wed, 22 Dec 2010 07:30:25 GMT</pubDate></item></channel></rss>