<?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[Problem mit Klassenkonstruktor]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe ein Programm, in dem ich eine Klasse namens sparse verwenden möchte. Die Klasse hab ich mir aus dem Netz gezogen und möchte gern eine globale Variable in meinem Hauptprogramm definieren. Die Klasse sieht wie folgt aus:</p>
<pre><code class="language-cpp">//  sparse.h

#ifndef sparse_h
#define sparse_h

#include &lt;assert.h&gt;
#include &lt;iostream&gt;
#include &lt;map&gt;

typedef map&lt;int,double&gt;::iterator iterator;
typedef map&lt;int,double&gt;::const_iterator const_iterator;

class sparse {

public:
  sparse(int __n) : n(__n) { s=new map&lt;int,double&gt;[n]; }
  sparse(const sparse&amp; t);
  ~sparse() { delete[] s; }

  double&amp; operator() (int i, int j)       { return s[i][j]; }
  double  operator() (int i, int j) const { return s[i][j]; }
  map&lt;int,double&gt;&amp; operator[] (int i) const { return s[i];  }

  double* vecmul(double x[], double b[]) const;

  int size() const { return n; }

private:
  int n;
  map&lt;int,double&gt; *s;

};

#endif
</code></pre>
<p>Wenn ich nun ein neues Objekt vom Typ sparse definieren wollte, würde das in etwa so aussehen:</p>
<pre><code class="language-cpp">sparse s(1000);
</code></pre>
<p>Allerdings weiß ich zu Beginn nicht, wieviele Elemente ich brauche. Wenn ich also einfach ein Objekt &quot;sparse s&quot; definiere, bekomme ich im Compiler die Fehlermeldung, dass kein geigneter Standardkonstruktor verfügbar ist. Wie kann ich daher den Konstruktor so umschreiben, dass ich die Ordnung erst später definieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157586/problem-mit-klassenkonstruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 07:34:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157586.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Aug 2006 16:36:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Klassenkonstruktor on Sun, 27 Aug 2006 16:36:02 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe ein Programm, in dem ich eine Klasse namens sparse verwenden möchte. Die Klasse hab ich mir aus dem Netz gezogen und möchte gern eine globale Variable in meinem Hauptprogramm definieren. Die Klasse sieht wie folgt aus:</p>
<pre><code class="language-cpp">//  sparse.h

#ifndef sparse_h
#define sparse_h

#include &lt;assert.h&gt;
#include &lt;iostream&gt;
#include &lt;map&gt;

typedef map&lt;int,double&gt;::iterator iterator;
typedef map&lt;int,double&gt;::const_iterator const_iterator;

class sparse {

public:
  sparse(int __n) : n(__n) { s=new map&lt;int,double&gt;[n]; }
  sparse(const sparse&amp; t);
  ~sparse() { delete[] s; }

  double&amp; operator() (int i, int j)       { return s[i][j]; }
  double  operator() (int i, int j) const { return s[i][j]; }
  map&lt;int,double&gt;&amp; operator[] (int i) const { return s[i];  }

  double* vecmul(double x[], double b[]) const;

  int size() const { return n; }

private:
  int n;
  map&lt;int,double&gt; *s;

};

#endif
</code></pre>
<p>Wenn ich nun ein neues Objekt vom Typ sparse definieren wollte, würde das in etwa so aussehen:</p>
<pre><code class="language-cpp">sparse s(1000);
</code></pre>
<p>Allerdings weiß ich zu Beginn nicht, wieviele Elemente ich brauche. Wenn ich also einfach ein Objekt &quot;sparse s&quot; definiere, bekomme ich im Compiler die Fehlermeldung, dass kein geigneter Standardkonstruktor verfügbar ist. Wie kann ich daher den Konstruktor so umschreiben, dass ich die Ordnung erst später definieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125533</guid><dc:creator><![CDATA[Neron17]]></dc:creator><pubDate>Sun, 27 Aug 2006 16:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Klassenkonstruktor on Sun, 27 Aug 2006 17:03:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">sparse() : n(0) {}
void set_new_size( int __n )
{
    delete[] s;  // ev. unnötig, aber sicher ist sicher
    n = __n;
    s=new map&lt;int,double&gt;[n];
}

//Aufruf

sparse s;
//...
s.set_new_size( 1000 );
</code></pre>
<p>Allerdings musst du dann darauf achten, dass du das Objekt s bzw. den map-Array vorher nicht benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125558</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Sun, 27 Aug 2006 17:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Klassenkonstruktor on Mon, 28 Aug 2006 05:57:04 GMT]]></title><description><![CDATA[<p>Vielen Dank 1013</p>
<p>Es funktioniert. Allerdings ist das delete[] s nicht so gut - da s ja noch nicht initialisiert wurde, gibts hier n Fehler. Ohne die Zeile klappts aber <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>Danke nochmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125850</guid><dc:creator><![CDATA[Neron17]]></dc:creator><pubDate>Mon, 28 Aug 2006 05:57:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Klassenkonstruktor on Mon, 28 Aug 2006 08:08:57 GMT]]></title><description><![CDATA[<p>Du solltest es trotzdem verwenden - spätestens wenn du ein zweites Mal set_new_size() aufrufst, läufst vdu sonst in ein Memory-Leck. Deinen Fehler löst du besser, indem du s initialisierst (mit einem &quot;s(0)&quot; in der Initialisierungsliste des Konstruktors).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125898</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 28 Aug 2006 08:08:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Klassenkonstruktor on Mon, 28 Aug 2006 08:49:48 GMT]]></title><description><![CDATA[<p>delete (und delete[] ?!) dürfen auf Nullpointer angewendet werden. Daher ist das delete an dieser Stelle bei initialisierung von s kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125933</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Mon, 28 Aug 2006 08:49:48 GMT</pubDate></item></channel></rss>