<?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[Objekt im Kontruktor]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein Objekt an ein anderes Objekt übergen</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class Adresse {

//Members...

}

class Kontakt {

//Members...
Adresse adr;

//Konstruktor
Kontakt(const char* x, const char* y, const Adresse&amp; a) {

...

adresse = a;

}
</code></pre>
<p>Mein DevC++ bring mir folgende Meldung</p>
<p>&quot; E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Kontakt.cpp In constructor `Kontakt::Kontakt(const char*, const char*, Adresse)': &quot;</p>
<p>Hat jemand ein Tip was ich hier falsch mache?</p>
<p>Danke Vorab und viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248926/objekt-im-kontruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 18:16:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248926.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Aug 2009 11:52:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 11:52:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein Objekt an ein anderes Objekt übergen</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class Adresse {

//Members...

}

class Kontakt {

//Members...
Adresse adr;

//Konstruktor
Kontakt(const char* x, const char* y, const Adresse&amp; a) {

...

adresse = a;

}
</code></pre>
<p>Mein DevC++ bring mir folgende Meldung</p>
<p>&quot; E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Kontakt.cpp In constructor `Kontakt::Kontakt(const char*, const char*, Adresse)': &quot;</p>
<p>Hat jemand ein Tip was ich hier falsch mache?</p>
<p>Danke Vorab und viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769714</guid><dc:creator><![CDATA[Cube]]></dc:creator><pubDate>Mon, 31 Aug 2009 11:52:51 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:01:03 GMT]]></title><description><![CDATA[<p>Du schreibst nur die Hälft der Fehlermeldung, aber beim spontanen draufgucken fällt mir schonmal folgendes auf:</p>
<pre><code class="language-cpp">//Members...
Adresse adr;   // Hier ist es adr

//Konstruktor
Kontakt(const char* x, const char* y, const Adresse&amp; a) {

...

adresse = a;   // Und hier adresse

}
</code></pre>
<p>Du musst dich schon entscheiden, wie deine Member heißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769722</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:01:03 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:02:46 GMT]]></title><description><![CDATA[<p>und glecih noch ein Tip: nimm Initialisierungslisten statt einfacher Zuweisungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769726</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:25:53 GMT]]></title><description><![CDATA[<p>Weiteres:</p>
<ul>
<li>Zugriff regeln (Konstruktor öffentlich, Membervariablen privat)</li>
<li>Einrückung für die Übersicht</li>
<li>Auf geschweifte Klammern achten, damit gleich klar ist, was wozu gehört</li>
<li>Semikolon am Ende der Klassendefinition</li>
<li><strong>Am wichtigsten: Sinnvollen, kompilierbaren Code zeigen, der das Problem repräsentiert!</strong> Es ist mühsam, wenn es im Nachhinein heisst: &quot;Ah, das ist nicht das Problem, das ist nur falsch abgeschrieben.&quot; Also schauen, dass der Code kompiliert und dann kopieren, nicht abschreiben.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1769743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769743</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:36:22 GMT]]></title><description><![CDATA[<p>ok erstmal danke für die geduld <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 />
also hier mal der ganze code:</p>
<pre><code class="language-cpp">//Kontakt.h

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &quot;Adresse.h&quot;

#ifndef _KONTAKT_H_
#define _KONTAKT_H_

using namespace std;

class Kontakt {

      private:

      //Member-Eigenschaften      
      char name[30];
      char vorname[30];
      Adresse adresse;

      public:

      //Konstruktoren
      Kontakt(const char* nn, const char* vn, const Adresse&amp; a);

      //Getter-Methode
      char get_name();
      char get_vorname();

      //Setter-Methode
      void set_name(const char* nn);
      void set_vorname(const char* vn);

      //Ausgabe Kontakt
      void print();  

};

#endif

//Kontakt.cpp
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &quot;Kontakt.h&quot;

//Konstruktoren
Kontakt::Kontakt(const char* nn, const char* vn, const Adresse&amp; a) { //Zeile 9 Fehler no matching function for call to `Adresse::Adresse()' 

              strncpy(name, nn, sizeof(name)-1);
              name[sizeof(name)] = '\0';

              strncpy(vorname, vn, sizeof(vorname)-1);
              vorname[sizeof(vorname)] = '\0';

              adresse = a;
}

//Ausgabe Kontakt
void Kontakt::print() {
     cout &lt;&lt; &quot;Name:    &quot; &lt;&lt; name &lt;&lt; endl 
          &lt;&lt; &quot;Vorname: &quot; &lt;&lt; vorname &lt;&lt; endl &lt;&lt; endl;
}

//Getter-Methode
char Kontakt::get_name() {
     return *name;
}

char Kontakt::get_vorname() {
     return *vorname;
}

//Setter-Methode
void Kontakt::set_name(const char* nn) {
     strncpy(name, nn, sizeof(name)-1);
     name[sizeof(name)] = '\0';
}

void Kontakt::set_vorname(const char* vn) {
     strncpy(vorname, vn, sizeof(vorname)-1);
     vorname[sizeof(vorname)] = '\0';
}

//Adresse.h

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;

#ifndef _ADRESSE_H_
#define _ADRESSE_H_

using namespace std;

class Adresse {

      friend class Kontakt;

      private:

      //Member-Eigenschaften
      char strasse[50];
      unsigned int plz;
      char ort[50];

      public:

      //Konstruktoren
      Adresse(const char* s, unsigned int p, const char* o);

      //Getter-Methode
      char get_strasse();
      int get_plz();
      char get_ort();

      //Setter-Methode
      void set_strasse(const char* s);
      void set_plz(int p);
      void set_ort(const char* o);

      //Ausgabe Adresse
      void print();

};

#endif

//Adresse.cpp
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &quot;Adresse.h&quot;

//Konstruktor
Adresse::Adresse(const char* s, unsigned int p, const char* o) {

    strncpy(strasse, s, sizeof(strasse)-1);
    strasse[sizeof(strasse)] = '\0';

    plz = p;

    strncpy(ort, o, sizeof(ort)-1);
    strasse[sizeof(ort)] = '\0';

}           

//Ausgabe Adresse
void Adresse::print() {
     cout &lt;&lt; strasse &lt;&lt; endl &lt;&lt; plz &lt;&lt; &quot; &quot; &lt;&lt; ort &lt;&lt; endl &lt;&lt; endl;    
}           

//Getter-Methode
char Adresse::get_strasse() {
     return *strasse;
}

int Adresse::get_plz() {
    return plz;
}

char Adresse::get_ort() {
     return *ort;
}

//Setter-Methode
void Adresse::set_strasse(const char* s){
     strncpy(strasse, s, sizeof(strasse)-1);
     strasse[sizeof(strasse)] = '\0';
}

void Adresse::set_plz(int p){
     plz = p;
}

void Adresse::set_ort(const char* o){
     strncpy(ort, o, sizeof(ort)-1);
     strasse[sizeof(ort)] = '\0';
}

//main.cpp

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &quot;Kontakt.h&quot;
#include &quot;Adresse.h&quot;

using namespace std;

int main(int argc, char *argv[])
{   
    Adresse *a1 = new Adresse(&quot;Deck 11&quot;, 1000, &quot;DS9&quot;);
    a1-&gt;print();

    Kontakt *k1 = new Kontakt(&quot;Sisko&quot;, &quot;Benjamin&quot;, *a1);
    k1-&gt;print();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>Die komplette Fehlermeldung:<br />
E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Kontakt.cpp In constructor <code>Kontakt::Kontakt(const char*, const char*, const Adresse&amp;)': 9 E:\\pAppz\\MyDev\\Dev-Cpp\\Projekte\\CPP01_Kontakte\\Kontakt.cpp no matching function for call to</code>Adresse::Adresse()'<br />
note E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Adresse.h:12 candidates are: Adresse::Adresse(const Adresse&amp;)<br />
note E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Adresse.h:12 Adresse::Adresse(const char*, unsigned int, const char*)<br />
E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Makefile.win [Build Error] [Kontakt.o] Error 1</p>
<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/1769748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769748</guid><dc:creator><![CDATA[Cube]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:42:54 GMT]]></title><description><![CDATA[<p>Cube schrieb:</p>
<blockquote>
<p>ok erstmal danke für die geduld <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 />
also hier mal der ganze code:</p>
<pre><code class="language-cpp">...
</code></pre>
</blockquote>
<p>Irgendwer hat scheinbar vergessen zu erwähnen dass das Problem auf das wesentliche reduziert werden sollte. Also ein Quellcode, der das Problem beinhaltet, compiliert, aber auch nicht mehr. Beim Reduzieren des Codes kommt man oft selber auf den Kern des Problems - weil der Reduzierte Code eben nicht viel mehr als dieser Kern ist.</p>
<blockquote>
<p>Die komplette Fehlermeldung:<br />
E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Kontakt.cpp In constructor <code>Kontakt::Kontakt(const char*, const char*, const Adresse&amp;)': 9 **E:\\pAppz\\MyDev\\Dev-Cpp\\Projekte\\CPP01_Kontakte\\Kontakt.cpp no matching function for call to</code>Adresse::Adresse()'**<br />
note E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Adresse.h:12 candidates are: Adresse::Adresse(const Adresse&amp;)<br />
note E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Adresse.h:12 Adresse::Adresse(const char*, unsigned int, const char*)<br />
E:\pAppz\MyDev\Dev-Cpp\Projekte\CPP01_Kontakte\Makefile.win [Build Error] [Kontakt.o] Error 1</p>
<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>
</blockquote>
<p>Da stehts doch schon. Es gibt keinen Standard-Konstruktor für Adresse. Da du aber ein Adresse-Member in Kontakt hast und im Ctor von Kontakt keine init-Liste, versucht der Compiler, das Adresse-Member per Default-Ctor zu initialisieren. Deshalb -&gt; Initialisierungsliste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769754</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:45:24 GMT]]></title><description><![CDATA[<p>Es wird de default-Konstruktor fuer adresse in Kontakt aufgerufen und dann erst a zugewiesen. Moegliche Loesung: Copy-Konstuktor fuer Adresse definierung und in Initialisierungsliste aufrufen.</p>
<p>PS: Hey, das ist doch C++, es waere besser fuer dich std::string zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769755</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:45:24 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:45:28 GMT]]></title><description><![CDATA[<p><code>Adresse</code> hat keinen Standardkonstruktor. Genau aus diesem Grund solltest du die Initialisierungsliste verwenden:</p>
<pre><code class="language-cpp">Kontakt::Kontakt(const char* nn, const char* vn, const Adresse&amp; a)
: adresse(a)
{
    // ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1769756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769756</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:55:46 GMT]]></title><description><![CDATA[<p><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>DANKE!!!</p>
<p>Nur zum Verständnis... ich muss nochmal dumm fragen <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>
<p>Ich habe in der Datei Adresse.ccp einen Konstruktor definiert:</p>
<pre><code class="language-cpp">Adresse::Adresse(const char* s, unsigned int p, const char* o) {

    strncpy(strasse, s, sizeof(strasse)-1);
    strasse[sizeof(strasse)] = '\0';

    plz = p;

    strncpy(ort, o, sizeof(ort)-1);
    strasse[sizeof(ort)] = '\0';

}
</code></pre>
<p>Dadurch fehlt der Standardkonstruktor? Nur eine Initalisierungsliste habe ich immer als kürzere Alternative zur einfachen Zuweisung gefunden. Heißt das die Initalisierungsliste ersetzt einen Konstruktor ala</p>
<pre><code class="language-cpp">Adresse::Adresse(const Adresse&amp; a);
</code></pre>
<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/1769763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769763</guid><dc:creator><![CDATA[Cube]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:55:46 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 12:58:34 GMT]]></title><description><![CDATA[<p>Sobald du irgendeinen Konstruktor deklarierst, wird der Standardkonstruktor nicht mehr automatisch generiert (was so auch sinnvoll ist).</p>
<p>Trotzdem solltest du <code>std::string</code> verwenden, besonders, wenn du noch nicht so geübt im Umgang mit Speicherverwaltung, Zeigern und Arrays bist. Die Zeile</p>
<pre><code class="language-cpp">strasse[sizeof(strasse)] = '\0';
</code></pre>
<p>führt nämlich zu einem Array-Überlauf und erzeugt undefiniertes Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769766</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Aug 2009 12:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:05:13 GMT]]></title><description><![CDATA[<blockquote>
<p>immer als kürzere Alternative zur einfachen Zuweisung gefunden.</p>
</blockquote>
<p>Nein, nicht immer. Besonders wenn man mit (const) Referenzen arbeitet, dann koennen diese manchmal nur in Initialisierungslisten zugewiesen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769768</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:09:13 GMT]]></title><description><![CDATA[<p>muss nocham fragen... sorry</p>
<p>1.)<br />
ich deklariere eine array char</p>
<pre><code class="language-cpp">char strasse[30];
</code></pre>
<p>d.h. ich reserviere 30x1Byte im stack</p>
<p>2.)<br />
ich weisse über strncpy() dem array werte zu</p>
<pre><code class="language-cpp">strncpy(strasse, &quot;Musterstr. 2&quot;, sizeof(strasse)-1)
</code></pre>
<p>mit dem sizeof stelle ich sicher das wirklich nur so viele zeichen in das array kopiert werden wie das array lang ist, das -1 verwende ich um platz zu lassen für \0 (siehe 3.)</p>
<p>3.)</p>
<pre><code class="language-cpp">strasse[sizeof(strasse)] = '\0';
</code></pre>
<p>ich dachte damit kopiere ich nie mehr zeichen in das array als es lang ist <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="😕"
    /> wie kann es zu einem überlauf kommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769769</guid><dc:creator><![CDATA[Cube]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:14:06 GMT]]></title><description><![CDATA[<p>Cube schrieb:</p>
<blockquote>
<p>Ich habe in der Datei Adresse.ccp einen Konstruktor definiert: [...]</p>
<p>Dadurch fehlt der Standardkonstruktor?</p>
</blockquote>
<p>Ja. Der Standardkonstruktor wird vom Compiler nur dann generiert, wenn du selber keinen anderen Ctor deklarierst.</p>
<blockquote>
<p>Nur eine Initalisierungsliste habe ich immer als kürzere Alternative zur einfachen Zuweisung gefunden. Heißt das die Initalisierungsliste ersetzt einen Konstruktor ala</p>
<pre><code class="language-cpp">Adresse::Adresse(const Adresse&amp; a);
</code></pre>
<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>
</blockquote>
<p>Nein. Eine Initialisierungsliste ist mehr als eine Zuzweisung, es ist wie der Name schon sagt eine Initialisierung. Alle Member der Klasse, die keine PODs sind, werden auf jeden Fall initialisiert. Das heißt, wenn du sie in der initialisierungsliste angibst, wird der entsprechende Konstruktor aufgerufen. Ansonsten wird der Default-Konstruktor implizit aufgerufen. Deshalb ist die Zuweisung im Ctor selber auch nicht so Performant wie wenn du es gleich in der initialisierung angibst:</p>
<pre><code class="language-cpp">class A1
{
  B b;

  A1(B const&amp; b2)  //keine initialisierungsliste: b wird implizit default-konstruiert
  {  
    b = b2; //Zuweisungsoperator von B
  }
};

class A2
{
  B b;

  A1(B const&amp; b2) : b(b2) //entsprechender Ctor von B wird aufgerufen
  {  
  }
};
</code></pre>
<p>Im Ctor von A1 werden zwei Aktionen ausgeführt, im Ctor von A2 nur eine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769773</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:14:32 GMT]]></title><description><![CDATA[<p>Ein Array mit n Elementen hat die Indizes 0..n-1, sprich Dein strasse[sizeof(strasse)] ist genau ein Element drüber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769775</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:14:32 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:18:00 GMT]]></title><description><![CDATA[<p>Cube schrieb:</p>
<blockquote>
<p>ich dachte damit kopiere ich nie mehr zeichen in das array als es lang ist <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="😕"
    /> wie kann es zu einem überlauf kommen?</p>
</blockquote>
<pre><code class="language-cpp">char strasse[30];
</code></pre>
<p><code>strasse</code> bietet Platz für 30 Zeichen. Deren Indizes reichen von 0 bis 29.</p>
<pre><code class="language-cpp">sizeof(strasse)
</code></pre>
<p>ergibt die Grösse des Objekts. Die beträgt 30 (Byte), weil <code>char</code> gerade 1 Byte gross ist.</p>
<pre><code class="language-cpp">strasse[sizeof(strasse)]
</code></pre>
<p>entspricht somit <code>strasse[30]</code> , was jenseits der Array-Grenzen liegt.</p>
<p>Also: <strong>Nimm <code>std::string</code> !</strong> Da kannst du dir auch die hässliche Kopie sparen und kommst nicht in Probleme, wenn du mal mehr als 30 Zeichen benötigst. Dein Konstruktor wird dann supereinfach:</p>
<pre><code class="language-cpp">Adresse::Adresse(const std::string&amp; neue_strasse, /* ... */)
: strasse(neue_strasse)
{
   // hier ist die ganze Strasse schon kopiert, ohne dass
   // du dafür noch irgendwas tun musst!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1769776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769776</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:15:16 GMT]]></title><description><![CDATA[<p>Cube schrieb:</p>
<blockquote>
<p>also hier mal der ganze code:</p>
<pre><code class="language-cpp">//Kontakt.h

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cstring&gt;
#include &quot;Adresse.h&quot;

#ifndef _KONTAKT_H_
#define _KONTAKT_H_

using namespace std;
</code></pre>
</blockquote>
<p>Du solltest die Include-Guards so setzen, dass sie <em>alles</em> umschließen. Das &quot;using namespace std;&quot; schreibt man gerne für kleine Beispiele dazu, gehört aber nicht in Header-Dateien rein.</p>
<p>Cube schrieb:</p>
<blockquote>
<pre><code class="language-cpp">[...zu viel char*, zu viel friend...]
</code></pre>
</blockquote>
<p>Cube schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char strasse[30]; 	
strasse[sizeof(strasse)] = '\0';
</code></pre>
</blockquote>
<p>sizeof(strasse) = 30 * sizeof(char) = 30<br />
strasse[30] steht aber für das 31ste Zeichen, was es nicht gibt.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769777</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:15:16 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:15:58 GMT]]></title><description><![CDATA[<p>Cube schrieb:</p>
<blockquote>
<p>3.)</p>
<pre><code class="language-cpp">strasse[sizeof(strasse)] = '\0';
</code></pre>
<p>ich dachte damit kopiere ich nie mehr zeichen in das array als es lang ist <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="😕"
    /> wie kann es zu einem überlauf kommen?</p>
</blockquote>
<p>Arrays beginnen aber mit dem Nullten Element, das heißt in deinem Fall ist 29 das letzte Element.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769778</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:21:02 GMT]]></title><description><![CDATA[<p>der klassiker!!!... ich danke! das ist einleuchtend <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/1769782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769782</guid><dc:creator><![CDATA[Cube]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt im Kontruktor on Mon, 31 Aug 2009 13:22:43 GMT]]></title><description><![CDATA[<p>Und, hast du schon auf <code>std::string</code> umgestellt? :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769784</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Aug 2009 13:22:43 GMT</pubDate></item></channel></rss>