<?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[Überladung des Zuweisungsoperators funktioniert nicht.]]></title><description><![CDATA[<p>Hallo,</p>
<p>bin neu hier im Forum, sowie relativ ungeübt was die C++ Programmierung angeht.<br />
Mein Problem ist folgendes: Ich hab mir nun schon ein paar Artikel im Bezug auf die Überladung des Zuweisungsoperators &quot;=&quot; durchgelesen. Meiner Meinung nach stimmt das was ich fabriziert habe auch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Code der main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;string.h&quot;
using namespace::std;
using std::string;

int main()
{
	String string1 (&quot;Geniessen Sie &quot;); 
	String string2; 
	cout &lt;&lt; &quot;Der String '&quot; &lt;&lt; string1 &lt;&lt; &quot;' hat &quot; &lt;&lt; string1.getLength() &lt;&lt; &quot; Zeichen!&quot; &lt;&lt; endl; 
	cout &lt;&lt; &quot;Der String '&quot; &lt;&lt; string2 &lt;&lt; &quot;' hat &quot; &lt;&lt; string2.getLength() &lt;&lt; &quot; Zeichen!&quot; &lt;&lt; endl; 
	cout &lt;&lt; &quot;Anzahl String-Objekte: &quot; &lt;&lt; String::getNumberOfStringObjects() &lt;&lt; endl;

	string2 = string1; 
	string1 = &quot;Keep smiling!&quot;; 
	String string3(string1); 
	cout &lt;&lt; &quot;string1: &quot; &lt;&lt; string1 &lt;&lt; endl; 
	cout &lt;&lt; &quot;string2: &quot; &lt;&lt; string2 &lt;&lt; endl; 
	cout &lt;&lt; &quot;string3: &quot; &lt;&lt; string3 &lt;&lt; endl; 
	cout &lt;&lt; &quot;Anzahl String-Objekte: &quot; &lt;&lt; String::getNumberOfStringObjects() &lt;&lt; endl;

	cin.ignore();

	return 0;
}
</code></pre>
<p>Code der string.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace::std;
using std::string;

static int numberOfStringObjects = 0;

class String
{

private:

	string content;
	int length;

public:

String()
{ 
	length = 0;
	numberOfStringObjects++;
}

String(string content)
{	
	setLength(content);
	setString(content);
	numberOfStringObjects++;
}

friend ostream&amp; operator &lt;&lt; (ostream&amp;, const String&amp;);
String&amp; operator = (const String&amp; str);

void setString(string thecontent)
{
	content = thecontent;
}

string getString()
{
	return content;
}

void setLength(string thestring)
{
	length = thestring.length();
}

int getLength()
{
	return length;
}

static int getNumberOfStringObjects()
{
	return numberOfStringObjects;
}

};

ostream&amp; operator &lt;&lt; (ostream&amp; os, const String&amp; str)
{
  os &lt;&lt; str.content;
  return os;
}

String&amp; String::operator = (const String&amp; str)
{
    content = str.content;   
    return *this;      
}
</code></pre>
<p>Wenn ich nun versuche das Programm auszuführen zeigt mir der Compiler folgenden Fehler an:<br />
<strong>error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'const char [14]' akzeptiert (oder keine geeignete Konvertierung möglich)</strong><br />
Das Ganze bezieht sich auf die Zeile 17 der main.cpp, dort soll das Objekt string1 den Wert des C-Strings &quot;Keep Smiling!&quot; annehmen.</p>
<p>Seht ihr den Fehler und könnt mir helfen?!</p>
<p>Grüße</p>
<p>D</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305688/überladung-des-zuweisungsoperators-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 14:35:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305688.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Jul 2012 13:57:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladung des Zuweisungsoperators funktioniert nicht. on Thu, 05 Jul 2012 13:57:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bin neu hier im Forum, sowie relativ ungeübt was die C++ Programmierung angeht.<br />
Mein Problem ist folgendes: Ich hab mir nun schon ein paar Artikel im Bezug auf die Überladung des Zuweisungsoperators &quot;=&quot; durchgelesen. Meiner Meinung nach stimmt das was ich fabriziert habe auch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Code der main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;string.h&quot;
using namespace::std;
using std::string;

int main()
{
	String string1 (&quot;Geniessen Sie &quot;); 
	String string2; 
	cout &lt;&lt; &quot;Der String '&quot; &lt;&lt; string1 &lt;&lt; &quot;' hat &quot; &lt;&lt; string1.getLength() &lt;&lt; &quot; Zeichen!&quot; &lt;&lt; endl; 
	cout &lt;&lt; &quot;Der String '&quot; &lt;&lt; string2 &lt;&lt; &quot;' hat &quot; &lt;&lt; string2.getLength() &lt;&lt; &quot; Zeichen!&quot; &lt;&lt; endl; 
	cout &lt;&lt; &quot;Anzahl String-Objekte: &quot; &lt;&lt; String::getNumberOfStringObjects() &lt;&lt; endl;

	string2 = string1; 
	string1 = &quot;Keep smiling!&quot;; 
	String string3(string1); 
	cout &lt;&lt; &quot;string1: &quot; &lt;&lt; string1 &lt;&lt; endl; 
	cout &lt;&lt; &quot;string2: &quot; &lt;&lt; string2 &lt;&lt; endl; 
	cout &lt;&lt; &quot;string3: &quot; &lt;&lt; string3 &lt;&lt; endl; 
	cout &lt;&lt; &quot;Anzahl String-Objekte: &quot; &lt;&lt; String::getNumberOfStringObjects() &lt;&lt; endl;

	cin.ignore();

	return 0;
}
</code></pre>
<p>Code der string.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace::std;
using std::string;

static int numberOfStringObjects = 0;

class String
{

private:

	string content;
	int length;

public:

String()
{ 
	length = 0;
	numberOfStringObjects++;
}

String(string content)
{	
	setLength(content);
	setString(content);
	numberOfStringObjects++;
}

friend ostream&amp; operator &lt;&lt; (ostream&amp;, const String&amp;);
String&amp; operator = (const String&amp; str);

void setString(string thecontent)
{
	content = thecontent;
}

string getString()
{
	return content;
}

void setLength(string thestring)
{
	length = thestring.length();
}

int getLength()
{
	return length;
}

static int getNumberOfStringObjects()
{
	return numberOfStringObjects;
}

};

ostream&amp; operator &lt;&lt; (ostream&amp; os, const String&amp; str)
{
  os &lt;&lt; str.content;
  return os;
}

String&amp; String::operator = (const String&amp; str)
{
    content = str.content;   
    return *this;      
}
</code></pre>
<p>Wenn ich nun versuche das Programm auszuführen zeigt mir der Compiler folgenden Fehler an:<br />
<strong>error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'const char [14]' akzeptiert (oder keine geeignete Konvertierung möglich)</strong><br />
Das Ganze bezieht sich auf die Zeile 17 der main.cpp, dort soll das Objekt string1 den Wert des C-Strings &quot;Keep Smiling!&quot; annehmen.</p>
<p>Seht ihr den Fehler und könnt mir helfen?!</p>
<p>Grüße</p>
<p>D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230323</guid><dc:creator><![CDATA[savethedave]]></dc:creator><pubDate>Thu, 05 Jul 2012 13:57:37 GMT</pubDate></item><item><title><![CDATA[Reply to Überladung des Zuweisungsoperators funktioniert nicht. on Thu, 05 Jul 2012 14:04:34 GMT]]></title><description><![CDATA[<p>Ich denke, Du brauchst entweder einen</p>
<pre><code class="language-cpp">String::String(char const *);
</code></pre>
<p>oder einen</p>
<pre><code class="language-cpp">String&amp; String::operator=(char const *);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2230327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230327</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 05 Jul 2012 14:04:34 GMT</pubDate></item><item><title><![CDATA[Reply to Überladung des Zuweisungsoperators funktioniert nicht. on Thu, 05 Jul 2012 14:09:34 GMT]]></title><description><![CDATA[<p>Ein</p>
<pre><code class="language-cpp">String&amp; String::operator = (const string&amp; str);
</code></pre>
<p>würde auch reichen. Punkt ist: Rechts steht ein <code>const char[14]</code> , es ist aber ein <code>String</code> nötig. Ein <code>const char[14]</code> kann zwar in einen <code>std::string</code> umgewandelt werden und ein <code>std::string</code> in einen <code>String</code> , aber mehr als eine Station macht der Compiler nicht automatisch, sonst würde am Ende jeder Unsinnscode funktionieren, weil alles irgendwie in alles umwandelbar ist.</p>
<p>P.S.: Und bitte lass using namespaces in Headerdateien sein. Wenn man das macht, untergräbt man das Konzept der namespaces.<br />
P.P.S.: Und schau dir mal an, was Initialisierungslisten sind. Kommt wahrscheinlich bald in deinem Lehrbuch, falls es bis hierhin noch nicht dran war.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230328</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Jul 2012 14:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to Überladung des Zuweisungsoperators funktioniert nicht. on Thu, 05 Jul 2012 14:22:23 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>schonmal vielen Dank für die schnellen Antworten. Habe es nun folgendermaßen gemanaged:</p>
<pre><code class="language-cpp">String::String(char const * str)
{
	setString(str);
	numberOfStringObjects++;
}
</code></pre>
<p>Hatte es auch vorher schonmal mit einem Typkonvertierungskonstruktor probiert, allerdings war die Parameterangabe bei mir wahrscheinlich zu uneindeutig. Dickes Dankeschön an Caligulaminus!</p>
<p>Danke für die Tipps SeppJ, wenn ich aber die namespaces in der .h Datei entferne bekomme ich ne ganze Latte an Fehlermeldungen vom Compiler. Das es nicht unbedingt sauber ist wenn ich das da reinschreibe habe ich auch schon sehr oft gelesen.<br />
Aber im Moment liegt mein Fokus mehr darauf, überhaupt irgendwas hinzubekommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Grüße</p>
<p>D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230334</guid><dc:creator><![CDATA[savethedave]]></dc:creator><pubDate>Thu, 05 Jul 2012 14:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Überladung des Zuweisungsoperators funktioniert nicht. on Thu, 05 Jul 2012 15:12:37 GMT]]></title><description><![CDATA[<p>savethedave schrieb:</p>
<blockquote>
<p>Danke für die Tipps SeppJ, wenn ich aber die namespaces in der .h Datei entferne bekomme ich ne ganze Latte an Fehlermeldungen vom Compiler.</p>
</blockquote>
<p>Klar, du musst ja auch überall wo es nötig ist ein std:: schreiben.</p>
<blockquote>
<p>Das es nicht unbedingt sauber ist wenn ich das da reinschreibe habe ich auch schon sehr oft gelesen.<br />
Aber im Moment liegt mein Fokus mehr darauf, überhaupt irgendwas hinzubekommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Du möchtest also trainieren, wie es unsauber geht? Ist das wirklich eine gute Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230348</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Jul 2012 15:12:37 GMT</pubDate></item><item><title><![CDATA[Reply to Überladung des Zuweisungsoperators funktioniert nicht. on Thu, 05 Jul 2012 16:30:18 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>eine gute Idee ist das sicher nicht, aber ich habe zur Zeit noch ganz andere Baustellen zu bearbeiten. Kommt Zeit, kommt Sauberkeit. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Das mit dem std:: sollte ich mir allerdings wirklich mal angewöhnen.<br />
Ich habe mir auch mal ein bisschen was in Sachen Initialisierungslisten durchgelesen. Die scheinen ja wirklich praktisch zu sein wenn man mehrere Klassen hat und Konstruktoren der einen Klasse, Objekte einer anderen erzeugen sollen. Dran war das bei uns zwar noch nicht, wird aber bestimmt bald kommen.</p>
<p>greets</p>
<p>D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230384</guid><dc:creator><![CDATA[savethedave]]></dc:creator><pubDate>Thu, 05 Jul 2012 16:30:18 GMT</pubDate></item></channel></rss>