<?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[Einen Array von C++ Objekten mit Argumenten erstellen]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich hab eine simple Frage. <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="🙂"
    /><br />
Wie würde bei folgendem Aufruf in Main der entsprechende Prototyp im header aussehen? Ich finde dazu keine passende Lösung... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<pre><code>String rgb[3] = { String(s1), String(&quot;green&quot;), String(&quot;blue&quot;)};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/310579/einen-array-von-c-objekten-mit-argumenten-erstellen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 05:35:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310579.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Nov 2012 17:06:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 17:06:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich hab eine simple Frage. <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="🙂"
    /><br />
Wie würde bei folgendem Aufruf in Main der entsprechende Prototyp im header aussehen? Ich finde dazu keine passende Lösung... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<pre><code>String rgb[3] = { String(s1), String(&quot;green&quot;), String(&quot;blue&quot;)};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271166</guid><dc:creator><![CDATA[Cheerful Coder]]></dc:creator><pubDate>Thu, 15 Nov 2012 17:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 17:13:19 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef std::string String;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271169</guid><dc:creator><![CDATA[trollolol]]></dc:creator><pubDate>Thu, 15 Nov 2012 17:13:19 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 17:41:40 GMT]]></title><description><![CDATA[<p><strong>1.</strong> Das ist kein Aufruf, sondern eine Definition und Initialisierung eines Arrays von <code>String</code> -Objekten.</p>
<p><strong>2.</strong> Wir wissen nicht, von welchem Typ <code>s1</code> ist. (Es ist aber bestimmt einfach eine Instanz von <code>String</code> , oder?)</p>
<p><strong>3.</strong> String kann jeder Typ sein, der sich mit einem Zeichenketten-Literal initialisieren lässt - oder eben mit dem Typ von <code>s1</code> (wenn <code>s1</code> tatsächlich vom Typ String ist, dann muss der Typ einen Kopierkonstruktor haben).<br />
Aber dazu siehe Punkt 2.</p>
<p><strong>4.</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Darüber, wie die Definition von <code>String</code> aussieht, lässt sich so gut wie keine Angabe machen.</p>
<p>Allerdings denke ich, trollolol's Variante könnte da tatsächlich drinstehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271174</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 15 Nov 2012 17:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 18:00:06 GMT]]></title><description><![CDATA[<p>@Cheerful Coder: Aufruf von was? Was für ein Prototyp?</p>
<p>Sone schrieb:</p>
<blockquote>
<p><strong>2.</strong> Wir wissen nicht, von welchem Typ <code>s1</code> ist. (Es ist aber bestimmt einfach eine Instanz von <code>String</code> , oder?)</p>
</blockquote>
<p>Müssen wir auch nicht. Mit String meint er bestimmt std::string (schlampige Schreibweise = vorprogrammierte Fehler).</p>
<p>Sone schrieb:</p>
<blockquote>
<p><strong>3.</strong> String kann jeder Typ sein, der sich mit einem Zeichenketten-Literal initialisieren lässt - oder eben mit dem Typ von <code>s1</code> (wenn <code>s1</code> tatsächlich vom Typ String ist, dann muss der Typ einen Kopierkonstruktor haben).<br />
Aber dazu siehe Punkt 2.</p>
</blockquote>
<p>Klassen wird er noch nicht kennen, sonst würde er sich nicht mit solchen Fragen rumquälen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271180</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Thu, 15 Nov 2012 18:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 18:08:29 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p><strong>1.</strong> Das ist kein Aufruf, sondern eine Definition und Initialisierung eines Arrays von <code>String</code> -Objekten.</p>
</blockquote>
<p>1. Siehe Titel des Threats, damit weiß ich dann wohl, dass es eine Initialisierung ist...</p>
<blockquote>
<p><strong>2.</strong> Wir wissen nicht, von welchem Typ <code>s1</code> ist. (Es ist aber bestimmt einfach eine Instanz von <code>String</code> , oder?)</p>
</blockquote>
<p>2. Ja, es ist eine Instanz von String, tut mir leid, dass ich das nicht erwähnt habe</p>
<blockquote>
<p><strong>3.</strong> String kann jeder Typ sein, der sich mit einem Zeichenketten-Literal initialisieren lässt - oder eben mit dem Typ von <code>s1</code> (wenn <code>s1</code> tatsächlich vom Typ String ist, dann muss der Typ einen Kopierkonstruktor haben).<br />
Aber dazu siehe Punkt 2.</p>
<p><strong>4.</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Darüber, wie die Definition von <code>String</code> aussieht, lässt sich so gut wie keine Angabe machen.</p>
<p>Allerdings denke ich, trollolol's Variante könnte da tatsächlich drinstehen.</p>
</blockquote>
<p>3. Für mich ist trollolol's Variante leider nicht wirklich ersichtlich, da ich<br />
mich mit dieser Form noch nicht auseinandergesetzt habe, bin noch Anfänger in C++ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Ich schicke einfach mal den ganzen Code, vielleicht ist es dann ersichtlicher was ich möchte.</p>
<p>Ich komme bei dem Punkt der Initialisierung von String rgb[3] = { String(s1), String(&quot;green&quot;), String(&quot;blue&quot;)}; in Main nicht weiter. Den Rest habe ich erstmal auskommentiert.</p>
<p>Wo ich schonmal dabei bin den ganzen Code zu posten...<br />
Bei der Eingabe scheint er irgendwie ein Memory Problem zu haben, sobald ich mehr oder weniger als 2 Zeichen verwende? Könnt ihr mir dazu<br />
vielleicht auch was sagen?</p>
<pre><code>Header.h
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

#include&lt;iostream&gt;
class String
{
    private:
    char *sentence;
    static const int STRINGMAX = 30;
    int count;

    public:
    String();
    ~String();
    String(const char *);
    String(const String &amp;);

    String &amp; Stringup();
    int has(char);

    String &amp; operator=(const String &amp;);
    String &amp; operator&gt;(const String &amp;);
    String &amp; operator&lt;(const String &amp;);
    String &amp; operator + (const String &amp;);

    friend String &amp; operator + (const char *, String &amp;);
    friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;, const String &amp;);
    friend std::istream &amp; operator&gt;&gt;(std::istream &amp; is, String &amp; st);
};

#endif // HEADER_H_INCLUDED
</code></pre>
<pre><code>Source.cpp
#include &quot;header.h&quot;
#include &lt;iostream&gt;
#include &lt;cstring&gt;

String::String()
{
    sentence = new char[1];
    sentence = NULL;
    count = 0;
}

String::~String()
{
    delete [] sentence;
}

String::String(const char *str)
{
    sentence = new char [String::STRINGMAX];
    strcpy(sentence, str);
}

std::ostream &amp; operator &lt;&lt; (std::ostream &amp; os, const String &amp; s)
{
    os &lt;&lt; s.sentence;
    return os;
}

std::istream &amp; operator &gt;&gt; (std::istream &amp; is, String &amp; s)
{
    char temp[String::STRINGMAX];
    is.get(temp, String::STRINGMAX);

    if (is)
     s = temp;

     while (is &amp;&amp; is.get() != '\n')
      continue;

    return is;
}

String &amp; String::operator = (const String &amp; s)
{
    if (this == &amp;s) // object assigned to itself
        return *this; // all done

    delete [] sentence;
    sentence = new char [String::STRINGMAX];
    strcpy(sentence, s.sentence);

    return *this;
}

//s2 = &quot;My name is &quot; + s3; // overloaded =, + operators

String &amp; operator + (const char *s, String &amp; str)
{
    char *buffer;
    int buffercount = strlen(s);
    int sentencecount = strlen(str.sentence);
    buffer = new char [buffercount + sentencecount + 1];
    strcpy(buffer, s);

    strcat(buffer, str.sentence);
    strcpy(str.sentence, buffer);

    delete [] buffer;
    return str;
}

String &amp; String::operator + (const String &amp;str)
{
    strcat (sentence, str.sentence);
    return *this;
}

String &amp; String::Stringup(void)
{

   char *buffer;
   buffer = &amp;sentence[0];

   count = strlen(sentence);

   for (int x = 0; x &lt; count; x++)
      {
      *sentence = toupper(*sentence);
      sentence++;
      }

    sentence = buffer;

    return *this;
}

int String::has(char letter)
{
   char *buffer;
   buffer = &amp;sentence[0];

   while (*sentence)
    {
    if (*sentence == letter)
     count++;

     sentence++;
    }

   sentence = buffer;

   return count;
}
</code></pre>
<pre><code>Main.cpp
#include &lt;iostream&gt;
#include &quot;header.h&quot;

using namespace std;

int main()
{
String s1(&quot; and I am a C++ student.&quot;);
String s2 = &quot;Please enter your name: &quot;;
String s3;

cout &lt;&lt; s2; // overloaded &lt;&lt; operator
cin &gt;&gt; s3; // overloaded &gt;&gt; operator
s2 = &quot;My name is &quot; + s3; // overloaded =, + operators
cout &lt;&lt; s2 &lt;&lt; &quot;.\n&quot;;
s2 = s2 + s1;
s2.Stringup(); // converts string to uppercase
cout &lt;&lt; &quot;The string\n&quot; &lt;&lt; s2 &lt;&lt; &quot;\ncontains &quot; &lt;&lt; s2.has('A')
&lt;&lt; &quot; 'A' characters in it.\n&quot;;
s1 = &quot;red&quot;; // String(const char *),
// then String &amp; operator=(const String&amp;)
String rgb[3] = { String(s1), String(&quot;green&quot;), String(&quot;blue&quot;)};

/*
cout &lt;&lt; &quot;Enter the name of a primary color for mixing light: &quot;;
String ans;

bool success = false;

while (cin &gt;&gt; ans)
{
ans.stringlow(); // converts string to lowercase
for (int i = 0; i &lt; 3; i++)
{
if (ans == rgb[i]) // overloaded == operator
{
cout &lt;&lt; &quot;That’s right!\n&quot;;
success = true;
break;
}
}
if (success)
break;
else
cout &lt;&lt; &quot;Try again!\n&quot;;
}
cout &lt;&lt; &quot;Bye\n&quot;;
*/
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271181</guid><dc:creator><![CDATA[Cheerful Coder]]></dc:creator><pubDate>Thu, 15 Nov 2012 18:08:29 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 18:09:11 GMT]]></title><description><![CDATA[<p>Ach, jetzt verstehe ich was er will! Er will nur die Deklaration des Arrays! <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>Der &quot;Prototyp&quot;, also die Deklaration, sähe so aus:</p>
<pre><code>extern String rgb[3]; //Zu diesem &quot;Zeitpunkt&quot; muss String lediglich deklariert sein
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271182</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 15 Nov 2012 18:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 18:10:43 GMT]]></title><description><![CDATA[<p>ICh lag wohl doch falsch, aber das hat einen Grund <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> :</p>
<p>Cheerful Coder schrieb:</p>
<blockquote>
<p>Ich komme bei dem Punkt der Initialisierung von String rgb[3] = { String(s1), String(&quot;green&quot;), String(&quot;blue&quot;)}; in Main nicht weiter.</p>
</blockquote>
<p>Das ist überhaupt nicht was du geschrieben hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271184</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 15 Nov 2012 18:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 18:41:03 GMT]]></title><description><![CDATA[<p>Du benötigst einen Copy-Konstruktor. Wie ich sehe, hast du ihn im Header deklariert, aber in der .cpp hast du ihn nicht implementiert.</p>
<p>Und beim deinem Default-Konstruktor entsteht wahrscheinlich dein Memory Problem. So ist es besser:</p>
<pre><code>String::String()
{
    sentence = NULL;
    count = 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271189</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 15 Nov 2012 18:41:03 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 18:44:26 GMT]]></title><description><![CDATA[<p>Ramanujan schrieb:</p>
<blockquote>
<p>So ist es besser:</p>
<pre><code>String::String()
{
    sentence = NULL;
    count = 0;
}
</code></pre>
</blockquote>
<p>Wieso keine Initialisierungsliste?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271192</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 15 Nov 2012 18:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Thu, 15 Nov 2012 23:48:58 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Hilfe!<br />
Habs jetzt soweit fast fertig. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Er gibt nur noch nen Fehler<br />
bei meinem Destructor, wüsste gerne warum er das tut <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 />
Wenn ich den Destructor weglasse, dann beendet er das Programm ganz normal.</p>
<p>Hier ist mein Code:</p>
<pre><code>header.h
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

#include&lt;iostream&gt;

class String
{
    private:
    char *sentence;
    int count;
    static const int STRINGMAX = 30;

    public:
    String();
    ~String();
    String(const char *);
    String(const String &amp;);
    String &amp; Stringup();
    String &amp; Stringlow();
    int has(char);

    bool operator == (const String &amp;) const;
    String &amp; operator=(const String &amp;);
    String &amp; operator + (const String &amp;);

    friend String &amp; operator + (const char *, String &amp;);
    friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;, const String &amp;);
    friend std::istream &amp; operator&gt;&gt;(std::istream &amp; is, String &amp; st);
};

#endif // HEADER_H_INCLUDED
</code></pre>
<pre><code>Source.cpp
#include &quot;header.h&quot;
#include &lt;iostream&gt;
#include &lt;cstring&gt;

String::String()
{
    sentence = NULL;
    count = 0;
}

String::~String()
{
   delete [] sentence;
}

String::String(const String &amp; c)
{
    count = c.count;
    sentence = new char [count + 1];
    std::strcpy(sentence, c.sentence);
}

String::String(const char *str)
{
    sentence = new char [String::STRINGMAX];
    strcpy(sentence, str);
}

std::ostream &amp; operator &lt;&lt; (std::ostream &amp; os, const String &amp; s)
{
    os &lt;&lt; s.sentence;
    return os;
}

std::istream &amp; operator &gt;&gt; (std::istream &amp; is, String &amp; s)
{
    char temp[String::STRINGMAX];
    is.get(temp, String::STRINGMAX);

    if (is)
     s = temp;

     while (is &amp;&amp; is.get() != '\n')
      continue;

    return is;
}

String &amp; String::operator = (const String &amp; s)
{
    if (this == &amp;s) // object assigned to itself
        return *this; // all done

    delete [] sentence;
    sentence = new char [String::STRINGMAX];
    strcpy(sentence, s.sentence);

    return *this;
}

//s2 = &quot;My name is &quot; + s3; // overloaded =, + operators

String &amp; operator + (const char *s, String &amp; str)
{
    char *buffer;
    int buffercount = strlen(s);
    int sentencecount = strlen(str.sentence);
    buffer = new char [buffercount + sentencecount + 1];
    strcpy(buffer, s);

    strcat(buffer, str.sentence);
    strcpy(str.sentence, buffer);

    delete [] buffer;
    return str;
}

String &amp; String::operator + (const String &amp;str)
{
    strcat (sentence, str.sentence);
    return *this;
}

String &amp; String::Stringup(void)
{

   char *buffer;
   buffer = &amp;sentence[0];

   count = strlen(sentence);

   for (int x = 0; x &lt; count; x++)
      {
      *sentence = toupper(*sentence);
      sentence++;
      }

    sentence = buffer;

    count = 0;

    return *this;
}

String &amp; String::Stringlow(void)
{

   char *buffer;
   buffer = &amp;sentence[0];

   count = strlen(sentence);

   for (int x = 0; x &lt; count; x++)
      {
      *sentence = tolower(*sentence);
      sentence++;
      }

    sentence = buffer;

    count = 0;

    return *this;
}

int String::has(char letter)
{
   char *buffer;
   buffer = &amp;sentence[0];

   while (*sentence)
    {
    if (*sentence == letter)
     count++;

     sentence++;
    }

   sentence = buffer;

   return count;
}

bool String::operator == (const String &amp;str) const
{
    return (std::strcmp(sentence, str.sentence) == 0);
}
</code></pre>
<pre><code>Main.cpp
#include &lt;iostream&gt;
#include &quot;header.h&quot;

using namespace std;

int main()
{
String s1(&quot; and I am a C++ student.&quot;);
String s2 = &quot;Please enter your name: &quot;;
String s3;

cout &lt;&lt; s2; // overloaded &lt;&lt; operator
cin &gt;&gt; s3; // overloaded &gt;&gt; operator
s2 = &quot;My name is &quot; + s3; // overloaded =, + operators
cout &lt;&lt; s2 &lt;&lt; &quot;.\n&quot;;
s2 = s2 + s1;
s2.Stringup(); // converts string to uppercase
cout &lt;&lt; &quot;The string\n&quot; &lt;&lt; s2 &lt;&lt; &quot;\ncontains &quot; &lt;&lt; s2.has('A')
&lt;&lt; &quot; 'A' characters in it.\n&quot;;
s1 = &quot;red&quot;; // String(const char *),
// then String &amp; operator=(const String&amp;)
String rgb[3] = { String(s1), String(&quot;green&quot;), String(&quot;blue&quot;)};
cout &lt;&lt; &quot;Enter the name of a primary color for mixing light: &quot;;
String ans;

bool success = false;

while (cin &gt;&gt; ans)
{
ans.Stringlow(); // converts string to lowercase
for (int i = 0; i &lt; 3; i++)
{
if (ans == rgb[i]) // overloaded == operator
{
cout &lt;&lt; &quot;That’s right!\n&quot;;
success = true;
break;
}
}
if (success)
break;
else
cout &lt;&lt; &quot;Try again!\n&quot;;
}
cout &lt;&lt; &quot;Bye\n&quot;;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2271296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271296</guid><dc:creator><![CDATA[Cheerful Coder]]></dc:creator><pubDate>Thu, 15 Nov 2012 23:48:58 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Fri, 16 Nov 2012 00:10:48 GMT]]></title><description><![CDATA[<p>Wozu brauchst du STRINGMAX? Wie lang darf dein String damit jemals werden? Hält dein Programm sich datan?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271300</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 16 Nov 2012 00:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Fri, 16 Nov 2012 00:22:54 GMT]]></title><description><![CDATA[<p>Cheerful Coder schrieb:</p>
<blockquote>
<p>Vielen Dank für die Hilfe!<br />
Habs jetzt soweit fast fertig. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Er gibt nur noch nen Fehler</p>
</blockquote>
<p>Beim Überfliegen fallen mir in fast jeder Funktion Fehler auf (Default-konstruktor und Destruktor sind die Einzigen ohne Fehler - wobei dein Defaultkonstuktor ggf. trotzdem überarbeitet werden sollte). C-String-Funktionen reagieren in der Regel allergisch auf Nullpointer. Wozu ist eigentlich count gut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2271303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2271303</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 16 Nov 2012 00:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Sun, 18 Nov 2012 12:36:37 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Wozu brauchst du STRINGMAX? Wie lang darf dein String damit jemals werden? Hält dein Programm sich datan?</p>
</blockquote>
<p>Ich hab es so übernommen aus dem Buch ... dachte das das so möglich wäre,<br />
wenn ich es als statisch in der Klasse deklariere...ist das falsch? <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>camper schrieb:</p>
<blockquote>
<p>Beim Überfliegen fallen mir in fast jeder Funktion Fehler auf (Default-konstruktor und Destruktor sind die Einzigen ohne Fehler - wobei dein Defaultkonstuktor ggf. trotzdem überarbeitet werden sollte). C-String-Funktionen reagieren in der Regel allergisch auf Nullpointer. Wozu ist eigentlich count gut?</p>
</blockquote>
<p>Count soll abzählen wieviele Buchstaben in stringup bzw. stringlow groß- bzw. kleingeschrieben werden sollen, aber vermutlich kann ich auch sowas nehmen wie</p>
<pre><code>while (*sentence)
</code></pre>
<p>richtig? <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>Könnteste mir vielleicht sagen, was meine Fehler sind? <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="🙂"
    /> Reicht auch<br />
wenns die gröbsten Fehler sind, das wäre sehr hilfreich! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272007</guid><dc:creator><![CDATA[Cheerful Coder]]></dc:creator><pubDate>Sun, 18 Nov 2012 12:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Mon, 19 Nov 2012 17:12:20 GMT]]></title><description><![CDATA[<p>Es ist möglich mit einem Nullzeiger einen leeren String darzustellen. Das ist allerdings inkompatibel mit den meisten FUnktionen der Standardbibliothek, konsequenterweise müsste bei jedem Funktionsaufruf (strlen,strcpy was auch immer) vorher dieser Fall geprüft werden.<br />
Damit sind nahezu alle Funktionen falsch.</p>
<p>Praktisch ist die Variante mit Nullzeiger allerdings nicht.<br />
Eine Möglichkeit besteht darin, den leeren String nicht als Sonderfall zu betrachten - dann verzichtet man z.B. gleich auf einen eigenständigen Defaultkonstruktor und verpasst z.B. dem const char*-Konstruktor ein Defaultargument.</p>
<pre><code class="language-cpp">String(const char* s=&quot;&quot;)
{
    std::size_t len = strlen(s);
    sentence = new char[len + 1];
    std::memcpy( sentence, s, len + 1 );
}
</code></pre>
<p>Eine andere Möglichkeit besteht darin, dafür ein statisches Array zu verwenden:</p>
<pre><code class="language-cpp">class String
{
private:
    static char empty_string[1];
...
};

char String::empty_string[1] = { '\0' };

String::String()
{
    sentence = empty_string;
}

String::~String()
{
    if ( sentence != empty_string )
        delete [] sentence;
}
</code></pre>
<p>Von der Beschränkung auf STRINGMAX Zeichen ist nichts zu halten. Man könnte dafür ja gleich das Array als Klassenmember halten und auf dynamische Speicherverwaltung verzichten. In jedem Fall ist bei einem der Länge nach begrenzten String sicherzustellen, dass diese Grenze nicht überschritten wird. Das ist z.B. in String::String(const char *str) nicht der Fall.<br />
Der operator+ ist seltsam; normalerweise sollte dieser nicht seine Argumente verändern. Zudem besteht dann auch ein Aliasproblem:</p>
<pre><code class="language-cpp">str s = &quot;foo&quot;;
s+s;
</code></pre>
<p>dürfte nicht funktionieren. Der Test auf Länge fehlt sowieso. Der andere operator+ funktioniert auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272405</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 19 Nov 2012 17:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Mon, 19 Nov 2012 17:37:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich hab es so übernommen aus dem Buch ... dachte das das so möglich wäre,<br />
wenn ich es als statisch in der Klasse deklariere...ist das falsch?</p>
</blockquote>
<p>Nicht direkt, STRINGMAX darf halt nur so groß werden, wie der Index es werden darf.</p>
<blockquote>
<p>Eine Möglichkeit besteht darin, den leeren String nicht als Sonderfall zu betrachten - dann verzichtet man z.B. gleich auf einen eigenständigen Defaultkonstruktor und verpasst z.B. dem const char*-Konstruktor ein Defaultargument.</p>
</blockquote>
<p>Ein leerer String hat die Länge 1 und besteht nur aus <code>'\0'</code> , das sollte auch die C-Funktionen nicht verstören.</p>
<blockquote>
<p>Von der Beschränkung auf STRINGMAX Zeichen ist nichts zu halten. Man könnte dafür ja gleich das Array als Klassenmember halten und auf dynamische Speicherverwaltung verzichten.</p>
</blockquote>
<p>Nicht direkt, STRINGMAX sollte die größtmögliche Zahl des Indexes vorgeben.</p>
<p>Warum reservierst du - immer, wenn du temporären Speicher reservierst nicht strlen() viele Elemente, anstatt STRINGMAX? Ist doch pure Speicherverschwendung.</p>
<p>Abgesehen davon kopiert strcpy den abschließenden '\0' Terminierer nicht mit, den musst du meines Wissens selbst anhängen.</p>
<p>Übrigens... Welches Buch liest du denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272423</guid><dc:creator><![CDATA[Der Tobi]]></dc:creator><pubDate>Mon, 19 Nov 2012 17:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Mon, 19 Nov 2012 19:51:49 GMT]]></title><description><![CDATA[<p>Der Tobi schrieb:</p>
<blockquote>
<p>Ein leerer String hat die Länge 1 und besteht nur aus <code>'\0'</code></p>
</blockquote>
<p>Ein leerer String hat die Länge Null.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272442</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 19 Nov 2012 19:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Mon, 19 Nov 2012 18:00:26 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Der Tobi schrieb:</p>
<blockquote>
<p>Ein leerer String hat die Länge 1</p>
</blockquote>
<p>Hast du nen Hirnschaden? ^^</p>
</blockquote>
<p>Anscheinend hast du einen Hirnschaden, wenn du gleich drauf los musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272447</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Mon, 19 Nov 2012 18:00:26 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Mon, 19 Nov 2012 18:04:59 GMT]]></title><description><![CDATA[<p>[Rewind] schrieb:</p>
<blockquote>
<p>Anscheinend hast du einen Hirnschaden, wenn du gleich drauf los musst.</p>
</blockquote>
<p>Gut, das war sehr grob, tut mir Leid.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272448</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 19 Nov 2012 18:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Mon, 19 Nov 2012 19:05:54 GMT]]></title><description><![CDATA[<p>*facepalm*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272476</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 19 Nov 2012 19:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to Einen Array von C++ Objekten mit Argumenten erstellen on Mon, 19 Nov 2012 19:52:44 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>*facepalm*</p>
</blockquote>
<p>Ach, Scheiße! Ich hab's falsch verstanden. Natürlich hat camper Recht. Ich dachte er meint leere Strings (also einen Zeiger auf das Terminierungszeichen)... weil ich schon wieder zu schnell lese... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /><br />
Klar, strlen o. ä. haben immer sowas stehen:</p>
<pre><code>while(*ptr)
</code></pre>
<p>Nen' Null-Pointer zu dereferenzieren ist natürlich UB und führt zum crash.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2272487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2272487</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 19 Nov 2012 19:52:44 GMT</pubDate></item></channel></rss>