<?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[Constructor - Variablen Problem]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich hatte dieses problem nun schon mehrfach und verstehe nicht warum.. Hoffe ihr koennt mir da weiterhelfen:</p>
<p>Ich habe eine Klasse mit member-variablen (z.B. pointer zum float array). Dazu habe ich zwei konstruktoren, wobei der eine aber am Ende auch noch den anderen aufruft. Wenn ich nun die member-variablen nur im zweiten konstruktor belege weiss das letztendliche objekt nichts davon. Hier ein beispiel:</p>
<pre><code class="language-cpp">Member variablen:
  float* pFeatVec;
  int dimension;

FeatureVector::FeatureVector(ConfigReader* crd2) {
        //do something..to assign an int to dimension
        FeatureVector(dimension);
}

FeatureVector::FeatureVector(int dim) {
        pFeatVec = new float[dim];
        for(int i=0;i&lt;dimension;i++) pFeatVec[i]=0;
}
</code></pre>
<p>Wenn ich nun also ein neues Objekt erstelle mit z.B.</p>
<pre><code class="language-cpp">FeatureVector* test = new FeatureVector(&amp;confReader);
</code></pre>
<p>dann verhaelt sich das programm als ob pFeatVec nie initialisiert und gefuellt worden waere..Genau das verstehe ich nicht. Beide Konstruktoren greifen auf die gleiche member-variable zu, warum also sind die aenderungen die der zweite konstruktor an ihnen vornimmt nicht sichtbar wenn er vom ersten aufgerufen wurde?</p>
<p>Um das ganze zu loesen muesste ich nun also folgendes schreiben:</p>
<pre><code class="language-cpp">FeatureVector::FeatureVector(ConfigReader* crd2) {
         //whatever gives dimension a value...
        pFeatVec = new float[dimension];
        FeatureVector(dimension);
}

FeatureVector::FeatureVector(int dim) {
        dimension = dim;
        pFeatVec = new float[dimension];
        for(int i=0;i&lt;dimension;i++) pFeatVec[i]=0;
}
</code></pre>
<p>was natuerlich ziemlicher scheisscode ist weil ich pFeatVec zweimal zuweisen muss... Das ganze gilt natuerlich auch im einfacheren Fall einer int-variable. Wenn ich sie nur im zweiten konstruktor zuweise ist es am ende im Objekt als haette ich das nie getan...</p>
<p>Bitte macht meinem Unwissen ein Ende.. Danke schon einmal</p>
<p>Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153265/constructor-variablen-problem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 05:33:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153265.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Jul 2006 15:47:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Constructor - Variablen Problem on Fri, 14 Jul 2006 15:47:45 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich hatte dieses problem nun schon mehrfach und verstehe nicht warum.. Hoffe ihr koennt mir da weiterhelfen:</p>
<p>Ich habe eine Klasse mit member-variablen (z.B. pointer zum float array). Dazu habe ich zwei konstruktoren, wobei der eine aber am Ende auch noch den anderen aufruft. Wenn ich nun die member-variablen nur im zweiten konstruktor belege weiss das letztendliche objekt nichts davon. Hier ein beispiel:</p>
<pre><code class="language-cpp">Member variablen:
  float* pFeatVec;
  int dimension;

FeatureVector::FeatureVector(ConfigReader* crd2) {
        //do something..to assign an int to dimension
        FeatureVector(dimension);
}

FeatureVector::FeatureVector(int dim) {
        pFeatVec = new float[dim];
        for(int i=0;i&lt;dimension;i++) pFeatVec[i]=0;
}
</code></pre>
<p>Wenn ich nun also ein neues Objekt erstelle mit z.B.</p>
<pre><code class="language-cpp">FeatureVector* test = new FeatureVector(&amp;confReader);
</code></pre>
<p>dann verhaelt sich das programm als ob pFeatVec nie initialisiert und gefuellt worden waere..Genau das verstehe ich nicht. Beide Konstruktoren greifen auf die gleiche member-variable zu, warum also sind die aenderungen die der zweite konstruktor an ihnen vornimmt nicht sichtbar wenn er vom ersten aufgerufen wurde?</p>
<p>Um das ganze zu loesen muesste ich nun also folgendes schreiben:</p>
<pre><code class="language-cpp">FeatureVector::FeatureVector(ConfigReader* crd2) {
         //whatever gives dimension a value...
        pFeatVec = new float[dimension];
        FeatureVector(dimension);
}

FeatureVector::FeatureVector(int dim) {
        dimension = dim;
        pFeatVec = new float[dimension];
        for(int i=0;i&lt;dimension;i++) pFeatVec[i]=0;
}
</code></pre>
<p>was natuerlich ziemlicher scheisscode ist weil ich pFeatVec zweimal zuweisen muss... Das ganze gilt natuerlich auch im einfacheren Fall einer int-variable. Wenn ich sie nur im zweiten konstruktor zuweise ist es am ende im Objekt als haette ich das nie getan...</p>
<p>Bitte macht meinem Unwissen ein Ende.. Danke schon einmal</p>
<p>Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097813</guid><dc:creator><![CDATA[mefirst]]></dc:creator><pubDate>Fri, 14 Jul 2006 15:47:45 GMT</pubDate></item><item><title><![CDATA[Reply to Constructor - Variablen Problem on Fri, 14 Jul 2006 15:58:12 GMT]]></title><description><![CDATA[<p>Die Antwort ist bestechend einfach: Du rufst hier nicht den anderen Konstruktor auf, das geht nämlich in C++ nicht (das reicht als Antwort auf die Frage an sich).</p>
<p>Was dort passiert: Es wird ein neues, temporäres FeatureVector-Objekt erzeugt, dass Du nicht benutzt, d.h. es wird noch in derselben Zeile wieder zerstört.</p>
<p>Diese Frage sollte in den Thread der meistgestellten <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/1097821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097821</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 14 Jul 2006 15:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to Constructor - Variablen Problem on Fri, 14 Jul 2006 16:01:55 GMT]]></title><description><![CDATA[<p>Eine Lösung für dieses Problem ist: Erzeuge eine private Funktion (z.Bsp. init) die diese Initialisierung macht und von beiden Konstruktoren aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097822</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 14 Jul 2006 16:01:55 GMT</pubDate></item></channel></rss>