<?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[Char Array an Konstruktor übergeben]]></title><description><![CDATA[<p>Hi!<br />
Seit mittlerweile 5 Stunden verzweifle ich an unserer Informatik Hausübung und ich habe nach wie vor keine Lösung für mein/unser Problem gefunden.</p>
<p>Aufgabenstellung:<br />
Wir müssen eine Klasse &quot;Level&quot; schreiben, die ein paar Membervariablen enthalten soll; also Levelname (string), Spielsymbol (char), Kurzname vom Level (char[2]), usw. Wir sollen nun einen Konstruktor schreiben, dem die Attribute übergeben werden. Unser einziges und schlimmstes Problem ist der Kurzname (char[2]).</p>
<p>In der Level.h habe ich (Kurzfassung):</p>
<pre><code>class Level
{
private:
  std::string cl_name;
  char cl_kurz_name[2];
public:
  Level(std::string cl_name, char *cl_kurz_name);
};
</code></pre>
<p>... und in der Level.cpp (ebenfalls nur kurzer Auszug):</p>
<pre><code>Level::Level(std::string cl_name, char *cl_kurz_name)
{
  [code];
}
</code></pre>
<p>Unser Programm wird mit folgendem Ausdruck getestet (Klassenaufruf):</p>
<pre><code>//Level Level_1(..., [cl_name], [cl_kurzname], ...);
Level Level_1(..., &quot;Level_1&quot;, &quot;L1&quot;, ...);
</code></pre>
<p>Das Problem ist nun, dass ich vom Compiler mit Fehlermeldungen überhäuft werde, sobald das char array verwendet wird.</p>
<p>In verschiedenen Foren habe ich nun gelesen, dass man ein char array gar nicht mit einem Konstruktor bearbeiten kann, sondern dass das nur mit dem Standardkonstruktor funktioniert (kann aber nicht sein, da wir den Standardkonstruktur NICHT verwenden dürfen). In anderen Foren habe ich gelesen, dass man das char array im Konstruktor manuell füllen könnte; das würde aber nur funktionieren, wenn man 'L1' statt &quot;L1&quot; eingibt (also einfache Striche, keine Anführungszeichen). Diese Möglichkeit fällt für mich aber ebenfalls weg, weil das Programm wie gesagt mit dem oben genannten Ausdruck getestet wird.</p>
<p>Hat vielleicht irgendjemand hier eine Idee für dieses Problem?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/315062/char-array-an-konstruktor-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 12:47:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315062.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Mar 2013 20:51:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Char Array an Konstruktor übergeben on Fri, 22 Mar 2013 20:51:15 GMT]]></title><description><![CDATA[<p>Hi!<br />
Seit mittlerweile 5 Stunden verzweifle ich an unserer Informatik Hausübung und ich habe nach wie vor keine Lösung für mein/unser Problem gefunden.</p>
<p>Aufgabenstellung:<br />
Wir müssen eine Klasse &quot;Level&quot; schreiben, die ein paar Membervariablen enthalten soll; also Levelname (string), Spielsymbol (char), Kurzname vom Level (char[2]), usw. Wir sollen nun einen Konstruktor schreiben, dem die Attribute übergeben werden. Unser einziges und schlimmstes Problem ist der Kurzname (char[2]).</p>
<p>In der Level.h habe ich (Kurzfassung):</p>
<pre><code>class Level
{
private:
  std::string cl_name;
  char cl_kurz_name[2];
public:
  Level(std::string cl_name, char *cl_kurz_name);
};
</code></pre>
<p>... und in der Level.cpp (ebenfalls nur kurzer Auszug):</p>
<pre><code>Level::Level(std::string cl_name, char *cl_kurz_name)
{
  [code];
}
</code></pre>
<p>Unser Programm wird mit folgendem Ausdruck getestet (Klassenaufruf):</p>
<pre><code>//Level Level_1(..., [cl_name], [cl_kurzname], ...);
Level Level_1(..., &quot;Level_1&quot;, &quot;L1&quot;, ...);
</code></pre>
<p>Das Problem ist nun, dass ich vom Compiler mit Fehlermeldungen überhäuft werde, sobald das char array verwendet wird.</p>
<p>In verschiedenen Foren habe ich nun gelesen, dass man ein char array gar nicht mit einem Konstruktor bearbeiten kann, sondern dass das nur mit dem Standardkonstruktor funktioniert (kann aber nicht sein, da wir den Standardkonstruktur NICHT verwenden dürfen). In anderen Foren habe ich gelesen, dass man das char array im Konstruktor manuell füllen könnte; das würde aber nur funktionieren, wenn man 'L1' statt &quot;L1&quot; eingibt (also einfache Striche, keine Anführungszeichen). Diese Möglichkeit fällt für mich aber ebenfalls weg, weil das Programm wie gesagt mit dem oben genannten Ausdruck getestet wird.</p>
<p>Hat vielleicht irgendjemand hier eine Idee für dieses Problem?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2308862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308862</guid><dc:creator><![CDATA[williwillswissen]]></dc:creator><pubDate>Fri, 22 Mar 2013 20:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array an Konstruktor übergeben on Fri, 22 Mar 2013 21:35:51 GMT]]></title><description><![CDATA[<p>Du hast da ne Menge von Problemen.<br />
&quot;L1&quot; ist 3 Zeichen groß (und zwar Z, 1 und danach \0 als Nullterminierung). cl_kurz_name hat aber nur Platz für 2.<br />
&quot;L1&quot; hat den typ const char*. Der Konstruktor nimmt aber nur char*.<br />
Das sind mal zwei Fehler die ich schon bei diesem Zusammengeschnittenen code sehe. Wo deine Compilerfehler tatsächlich herkommen, beachte mal <a href="http://www.c-plusplus.net/forum/304133" rel="nofollow">das hier.</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2308873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308873</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Fri, 22 Mar 2013 21:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to Char Array an Konstruktor übergeben on Sat, 23 Mar 2013 12:26:06 GMT]]></title><description><![CDATA[<p>Keine Ahnung wer sich solche Übungen einfallen lässt... <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="😞"
    /><br />
Das wichtigste wäre IMHO, dass Du das, was Du in anderen Foren gelesen zu haben glaubst, vergisst oder nochmal nachliest. Denn das was Du verstanden hast ist ziemlich wirr.</p>
<p>Bevor Du mit <code>strncpy()</code> und Konsorten kommst, hier eine Lösung, die die beiden Zeichen einzeln zuweist und dabei ganz gut mit zu langen, zu kurzen und gar nicht vorhandenen strings zurechtkommt.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

struct level{
  char kurz_name[2];
  level(const char* kn) {
    kurz_name[0] = kn ? kn[0] : '\0';
    kurz_name[1] = kn &amp;&amp; kn[0] != '\0' ? kn[1] : '\0';
  }
  std::string to_string() const {
    return kurz_name[1] ? std::string(kurz_name, kurz_name+2)
      : kurz_name[0] ? std::string(kurz_name, kurz_name+1)
      : std::string();
  }
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const level&amp; l){
  return out &lt;&lt; l.to_string();
}

int main(){
  level levels[] = { nullptr, &quot;Furble Wurble&quot;, &quot; reitet&quot;, &quot;auf&quot;+1, &quot;Asphalt bei&quot;+6, &quot;Utopi&quot;, &quot;a!&quot; };
  for(auto l : levels)
    std::cout &lt;&lt; l;
  std::cout &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2308946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2308946</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sat, 23 Mar 2013 12:26:06 GMT</pubDate></item></channel></rss>