<?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[Singleton-Muster]]></title><description><![CDATA[<p>Hey Leutz, diesmal gehts um eine Klasse, die Singleton ausnutzt.<br />
Leider kommt beim kompilieren ein Fehler, aber ich verstehe nicht ganz, was ich falsch gemacht habe.</p>
<pre><code>//einmal die Deklaration in .h 

#ifndef _CDoubleHashing 
#define _CDoubleHashing 

#include &lt;iostream&gt; 
class CDoubleHashing 
{ 
private: 
  CDoubleHashing(); 
  CDoubleHashing(const CDoubleHashing&amp; other); 
  CDoubleHashing operator=(CDoubleHashing&amp; other); 
  static CDoubleHashing m_instanz; 
public: 
  static CDoubleHashing&amp; getInstance(); 
  unsigned int hash(unsigned int I, unsigned int J, unsigned int dict_size, unsigned int attempt); 
}; 

#endif _CDoubleHashing 

//einmal in .cpp 

#include&quot;CDoubleHashing.h&quot; 

CDoubleHashing&amp; CDoubleHashing::getInstance() 
{ 
  return m_instanz; 
} 

CDoubleHashing CDoubleHashing::m_instanz; 

unsigned int CDoubleHashing::hash(unsigned int I, unsigned int J, unsigned int dict_size, unsigned int attempt) 
{ 
  int x = 2/(I+J)*(I+J+1)+J; 

  return ( x + attempt*(1+ ( x%(dict_size-2) ) ) ) % dict_size; 
}
</code></pre>
<p>Hier mal der genaue Fehler:<br />
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;private: __thiscall CDoubleHashing::CDoubleHashing(void)&quot; (??0CDoubleHashing@@AAE@XZ)&quot; in Funktion &quot;&quot;void __cdecl `dynamic initializer for 'private: static class CDoubleHashing CDoubleHashing::m_instanz''(void)&quot; (??__E?m_instanz@CDoubleHashing@@0V1@A@@YAXXZ)&quot;.</p>
<p>EDIT: Konstruktor nicht definiert ...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317835/singleton-muster</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 22:52:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317835.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Jun 2013 20:58:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Singleton-Muster on Fri, 21 Jun 2013 21:03:34 GMT]]></title><description><![CDATA[<p>Hey Leutz, diesmal gehts um eine Klasse, die Singleton ausnutzt.<br />
Leider kommt beim kompilieren ein Fehler, aber ich verstehe nicht ganz, was ich falsch gemacht habe.</p>
<pre><code>//einmal die Deklaration in .h 

#ifndef _CDoubleHashing 
#define _CDoubleHashing 

#include &lt;iostream&gt; 
class CDoubleHashing 
{ 
private: 
  CDoubleHashing(); 
  CDoubleHashing(const CDoubleHashing&amp; other); 
  CDoubleHashing operator=(CDoubleHashing&amp; other); 
  static CDoubleHashing m_instanz; 
public: 
  static CDoubleHashing&amp; getInstance(); 
  unsigned int hash(unsigned int I, unsigned int J, unsigned int dict_size, unsigned int attempt); 
}; 

#endif _CDoubleHashing 

//einmal in .cpp 

#include&quot;CDoubleHashing.h&quot; 

CDoubleHashing&amp; CDoubleHashing::getInstance() 
{ 
  return m_instanz; 
} 

CDoubleHashing CDoubleHashing::m_instanz; 

unsigned int CDoubleHashing::hash(unsigned int I, unsigned int J, unsigned int dict_size, unsigned int attempt) 
{ 
  int x = 2/(I+J)*(I+J+1)+J; 

  return ( x + attempt*(1+ ( x%(dict_size-2) ) ) ) % dict_size; 
}
</code></pre>
<p>Hier mal der genaue Fehler:<br />
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;private: __thiscall CDoubleHashing::CDoubleHashing(void)&quot; (??0CDoubleHashing@@AAE@XZ)&quot; in Funktion &quot;&quot;void __cdecl `dynamic initializer for 'private: static class CDoubleHashing CDoubleHashing::m_instanz''(void)&quot; (??__E?m_instanz@CDoubleHashing@@0V1@A@@YAXXZ)&quot;.</p>
<p>EDIT: Konstruktor nicht definiert ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333218</guid><dc:creator><![CDATA[Aknayirp]]></dc:creator><pubDate>Fri, 21 Jun 2013 21:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Fri, 21 Jun 2013 21:08:49 GMT]]></title><description><![CDATA[<p>Ganz einfach: Du hast den Default-Konstruktor <code>CDoubleHashing()</code> nur deklariert, aber nirgends definiert.</p>
<p>Edit: Falsch geguckt!<br />
Was du machen kannst, ist (seit C++11) einfach den Konstruktor als <code>default</code> zu markieren. Den Zuweisungsoperator musst du nicht überladen, da es dafür erstmal überhaupt zwei Objekte geben muss...</p>
<pre><code>CDoubleHashing() = default; 
  CDoubleHashing(const CDoubleHashing&amp; other);
</code></pre>
<p>Die Methode <code>hash</code> kannst du übrigens auch <code>static</code> machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333219</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 21 Jun 2013 21:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Fri, 21 Jun 2013 21:09:52 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Diese werden aber automatisch für dich definiert, daher ist das unnötig, lass diese Deklarationen vorerst weg.</p>
</blockquote>
<p>Aber der Kopierkonstruktor und Zuweisungskonstruktor soll ich in diesem Fall deklarieren und nicht definieren, damit der Compiler nicht zwei eigene erstellt. So steht es in meinem Skript.</p>
<p>Es geht in dieser Klasse ums Hashing, dazu sollen I und J zu einer Zahl gemacht werden (hier: x) und dann durch diese Double-Hashing Funktion gehen, aber irgendwie funktioniert das ganze nicht... Weiß einer vllcht. wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333220</guid><dc:creator><![CDATA[Aknayirp]]></dc:creator><pubDate>Fri, 21 Jun 2013 21:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Fri, 21 Jun 2013 21:33:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber der Kopierkonstruktor und Zuweisungskonstruktor soll ich in diesem Fall deklarieren und nicht definieren, damit der Compiler nicht zwei eigene erstellt. So steht es in meinem Skript.</p>
</blockquote>
<p>Sone hat einen Schritt weiter gedacht.</p>
<blockquote>
<p>Weiß einer vllcht. wieso?</p>
</blockquote>
<p>Ist das immer noch die Ausgangsfrage, oder wie? Ich weiß nicht, warum Sone sich korrigiert hat, der Standard-ctor ist deklariert und nicht definiert, das ist nach wie vor das Problem. Also Deklaration weglassen oder Constructor auch implementieren.</p>
<p>Falls das nicht die neue Frage ist, gewöhn Dir ganz schnell ab Aussagen wie</p>
<blockquote>
<p>irgendwie funktioniert das ganze nicht</p>
</blockquote>
<p>zu machen. Handfeste Erklärungen, Fehlermeldungen, Beschreibungen sind angebracht. So was ist für alle Leser und für Dich Zeitverschwendung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333222</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Fri, 21 Jun 2013 21:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Fri, 21 Jun 2013 21:39:38 GMT]]></title><description><![CDATA[<p>Ne, das war wohl von mir wirklich nicht gerade präzise geschrieben; also das Anfangsproblem habe ich hinbekommen. Aber trotzdem funktioniert es nicht so wie soll. Weil in der Funktion hash, wohl nicht die richtigen Werte rauskommen, wie sie sollten. Aber ich probiere das jetzt erstmal alleine weiter. Ansonsten frage ich hier nochmal nach.<br />
Danke für die Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Aknayirp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333223</guid><dc:creator><![CDATA[Aknayirp]]></dc:creator><pubDate>Fri, 21 Jun 2013 21:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 06:26:54 GMT]]></title><description><![CDATA[<p>Du könntest jedoch schauen, ob 2/(I+J) nicht 0 für deinen Fall ergibt. Dann wird der gesamte Summand nämlich null und x ist J. Es wird nicht automatisch zu einem Fließkommawert gecastet. Wenn Du das möchtest, solltest Du zwischendurch ein static_cast&lt;float&gt;(wert) einbauen oder 2.0 bzw. 2.0f statt 2 schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333250</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 22 Jun 2013 06:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 06:52:02 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Du könntest jedoch schauen, ob 2/(I+J) nicht 0 für deinen Fall ergibt. Dann wird der gesamte Summand nämlich null und x ist J. Es wird nicht automatisch zu einem Fließkommawert gecastet. Wenn Du das möchtest, solltest Du zwischendurch ein static_cast&lt;float&gt;(wert) einbauen oder 2.0 bzw. 2.0f statt 2 schreiben.</p>
</blockquote>
<p>Hat sich erledigt <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="🙂"
    /> Aber die 2 war das Problem... Hatte einfach die Formel nicht richtige hingeschrieben. Aber jetzt passt es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333254</guid><dc:creator><![CDATA[Aknayirp]]></dc:creator><pubDate>Sat, 22 Jun 2013 06:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 06:55:26 GMT]]></title><description><![CDATA[<p>Hier aber nicht zu float casten, sondern die Berechnung entsprechend umstellen:</p>
<pre><code class="language-cpp">2*(I+J+1)/(I+J)+J
</code></pre>
<p>(zuerst multiplizieren und dann dividieren)</p>
<p>Generell erscheint mir die Hashfunktion aber sehr eigenartig. Was sollen I und J denn überhaupt darstellen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333255</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 22 Jun 2013 06:55:26 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 06:58:25 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Hier aber nicht zu float casten, sondern die Berechnung entsprechend umstellen:</p>
<pre><code class="language-cpp">2*(I+J+1)/(I+J)+J
</code></pre>
<p>(zuerst multiplizieren und dann dividieren)</p>
<p>Generell erscheint mir die Hashfunktion aber sehr eigenartig. Was sollen I und J denn überhaupt darstellen?</p>
</blockquote>
<p>Das ist ja auch nicht direkt die Hashfunktion, soweit ich das verstanden habe. Das ist die Cantorische Paarungsfunktion(glaub so heißt es). Aber ja wie gesagt, die zwei war einfach falsch plaziert. Jetzt funktioniert alles richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333256</guid><dc:creator><![CDATA[Aknayirp]]></dc:creator><pubDate>Sat, 22 Jun 2013 06:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 07:30:30 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich weiß nicht, warum Sone sich korrigiert hat, der Standard-ctor ist deklariert und nicht definiert, das ist nach wie vor das Problem.</p>
</blockquote>
<p>Nein nein, ich habe zuerst gedacht, er wollte einfach alle drei Funktionen zur Verfügung stellen. Dann ist mir aufgefallen dass er ja alle private deklariert hat - Singleton...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333258</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 22 Jun 2013 07:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 11:26:16 GMT]]></title><description><![CDATA[<p>Mal ganz blöd gefragt: Warum den ganzen Aufriss mit der Klasse? Du könntest das auch einfach als Funktion hinschreiben. CDoubleHashing hat ja keine Datenmember.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333297</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 22 Jun 2013 11:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 11:30:37 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Mal ganz blöd gefragt: Warum den ganzen Aufriss mit der Klasse? Du könntest das auch einfach als Funktion hinschreiben. CDoubleHashing hat ja keine Datenmember.</p>
</blockquote>
<p>Soll so gemacht werden, da eine Aufgabe aus der Uni <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2333298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333298</guid><dc:creator><![CDATA[Aknayirp]]></dc:creator><pubDate>Sat, 22 Jun 2013 11:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton-Muster on Sat, 22 Jun 2013 15:18:10 GMT]]></title><description><![CDATA[<p>Da sag ich mal besser nichts zu und denke mir nur meinen Teil. Solange du nicht auf die Idee kommst, so was später in Produktionscode machen zu wollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333358</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 22 Jun 2013 15:18:10 GMT</pubDate></item></channel></rss>