<?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[Templates | richtige Syntax]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Also...</p>
<p>ich habe Klasse</p>
<p><strong>List</strong></p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class List {

private:
	ListElement&lt;HashElement&lt;T&gt; &gt;* start;
	int count;

public:

	/**
	* Gibt Pointer auf das naechste Element zurueck.
	*/
	ListElement&lt;HashElement&lt;T&gt; &gt;* getStartListElement(){
		return this-&gt;start;
	}

	/**
	* fuegt ein HashElement am Ende der Liste hinzu.
	*/
	void push_back(HashElement&lt;T&gt;* value) {
		ListElement&lt;HashElement&lt;T&gt; &gt;* temp = new ListElement&lt;HashElement&lt;T&gt; &gt;(value, NULL);

		if (this-&gt;start == NULL){
			this-&gt;start = temp;
			this-&gt;count++;
		} else {
			ListElement&lt;T&gt;* temp2 = this-&gt;start;

			while( temp2-&gt;getNext() != NULL){
				temp2 = temp2-&gt;getNext();
			}

			temp2-&gt;setNext(temp);
			this-&gt;count++;
		}
	}

	/** StandardKonstruktor. */
	List() {
		this-&gt;start = NULL;
		this-&gt;count = 0;
	}

....
};
</code></pre>
<p>Klasse <strong>ListElement</strong></p>
<pre><code class="language-cpp">template &lt;class T&gt;
class ListElement {

private:
	/** Pointer auf das naechste Element */
	ListElement* next;
	/** Pointer auf ein HashElement */
	T* data;

public:
	/** standardkonstruktor */
	ListElement(T* data, ListElement* next){
		this-&gt;data = data;
		this-&gt;next = next;
	}

	/**
	* Destruktor.
	*/
	~ListElement(){
		//delete this-&gt;next; NOOB!
		delete this-&gt;data;
	}

	/** get-Methode */
	T* getElement(){
		return this-&gt;data;
	}

	/**Gibt das naechste Element zurueck.
	* @return ListElement*/
	ListElement* getNext(){
		return this-&gt;next;
	}

	/**setzt das naechste Element*/
	void setNext(ListElement&lt;T&gt;* nextE){
		this-&gt;next = nextE;
	}
};
</code></pre>
<p>Klasse <strong>HashElement</strong></p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class HashElement {

public:
	/** key des Elements */
	MString&amp;    key;
	/** wert des Elements */ //TOCKEN 
	T*         value;
	/** hashcode des Elements. wird aus dem key ausgerechnet */
	int		hashcode; 

  /**
  * Konstruktor.
  */
  HashElement(MString&amp; key, T* value, int hashcode){
	this-&gt;key		= key;
	this-&gt;value		= value;
	this-&gt;hashcode  = hashcode;
  }
  ...

};
</code></pre>
<p>und wichtigste Klasse <strong>Hashtable</strong></p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Hashtable {

private:

  /** Array mit Listen. */
  List&lt;HashElement&lt;T&gt; &gt;** table;

  /** Laenge des Arrays. */
  int size;

....

HashElement&lt;T&gt;* put(MString&amp; key, T* value){
		if(key.length &gt; 0){
			// ermittle hash und erstelle Element
			int hash = getHashcode(key);
			//erstelle HashElement
			HashElement&lt;T&gt;* element = new HashElement&lt;T&gt;(key,value, hash);
			// ermittle hashwert und fuege Element ein
			hash = this-&gt;getHashValue(hash);

			this-&gt;table[hash]-&gt;push_back(element);

			this-&gt;hashElementCount++;
			this-&gt;setFillingLevel();

			//pruefe ob reorganisierung der Tabelle noetig ist
			if ( this-&gt;actualFillingLevel &gt;= this-&gt;maxFillingLevel){
				reorganize();
			}
			return element;
		} else {
			throw EmptyKeyExeption();
		}
	}

};
</code></pre>
<p>das alle starte ich so:</p>
<pre><code class="language-cpp">int main(){
    Hashtable&lt;BspKlasse&gt; map;
    BspKlasse* t = new BspKlasse(&quot;hallo&quot;);
    MString key(&quot;schluessel_1&quot;);
    map.put(key, t);
    return 0;
}
</code></pre>
<p>Ich bekomme dauernd Fehlermeldungen, ich glaube die Template-Syntax ist falsch...</p>
<p>Könnte jemand bitte helfen <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 schon mal und freues neues! :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279726/templates-richtige-syntax</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 11:09:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279726.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Jan 2011 18:39:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates | richtige Syntax on Sun, 02 Jan 2011 18:39:00 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Also...</p>
<p>ich habe Klasse</p>
<p><strong>List</strong></p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class List {

private:
	ListElement&lt;HashElement&lt;T&gt; &gt;* start;
	int count;

public:

	/**
	* Gibt Pointer auf das naechste Element zurueck.
	*/
	ListElement&lt;HashElement&lt;T&gt; &gt;* getStartListElement(){
		return this-&gt;start;
	}

	/**
	* fuegt ein HashElement am Ende der Liste hinzu.
	*/
	void push_back(HashElement&lt;T&gt;* value) {
		ListElement&lt;HashElement&lt;T&gt; &gt;* temp = new ListElement&lt;HashElement&lt;T&gt; &gt;(value, NULL);

		if (this-&gt;start == NULL){
			this-&gt;start = temp;
			this-&gt;count++;
		} else {
			ListElement&lt;T&gt;* temp2 = this-&gt;start;

			while( temp2-&gt;getNext() != NULL){
				temp2 = temp2-&gt;getNext();
			}

			temp2-&gt;setNext(temp);
			this-&gt;count++;
		}
	}

	/** StandardKonstruktor. */
	List() {
		this-&gt;start = NULL;
		this-&gt;count = 0;
	}

....
};
</code></pre>
<p>Klasse <strong>ListElement</strong></p>
<pre><code class="language-cpp">template &lt;class T&gt;
class ListElement {

private:
	/** Pointer auf das naechste Element */
	ListElement* next;
	/** Pointer auf ein HashElement */
	T* data;

public:
	/** standardkonstruktor */
	ListElement(T* data, ListElement* next){
		this-&gt;data = data;
		this-&gt;next = next;
	}

	/**
	* Destruktor.
	*/
	~ListElement(){
		//delete this-&gt;next; NOOB!
		delete this-&gt;data;
	}

	/** get-Methode */
	T* getElement(){
		return this-&gt;data;
	}

	/**Gibt das naechste Element zurueck.
	* @return ListElement*/
	ListElement* getNext(){
		return this-&gt;next;
	}

	/**setzt das naechste Element*/
	void setNext(ListElement&lt;T&gt;* nextE){
		this-&gt;next = nextE;
	}
};
</code></pre>
<p>Klasse <strong>HashElement</strong></p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class HashElement {

public:
	/** key des Elements */
	MString&amp;    key;
	/** wert des Elements */ //TOCKEN 
	T*         value;
	/** hashcode des Elements. wird aus dem key ausgerechnet */
	int		hashcode; 

  /**
  * Konstruktor.
  */
  HashElement(MString&amp; key, T* value, int hashcode){
	this-&gt;key		= key;
	this-&gt;value		= value;
	this-&gt;hashcode  = hashcode;
  }
  ...

};
</code></pre>
<p>und wichtigste Klasse <strong>Hashtable</strong></p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Hashtable {

private:

  /** Array mit Listen. */
  List&lt;HashElement&lt;T&gt; &gt;** table;

  /** Laenge des Arrays. */
  int size;

....

HashElement&lt;T&gt;* put(MString&amp; key, T* value){
		if(key.length &gt; 0){
			// ermittle hash und erstelle Element
			int hash = getHashcode(key);
			//erstelle HashElement
			HashElement&lt;T&gt;* element = new HashElement&lt;T&gt;(key,value, hash);
			// ermittle hashwert und fuege Element ein
			hash = this-&gt;getHashValue(hash);

			this-&gt;table[hash]-&gt;push_back(element);

			this-&gt;hashElementCount++;
			this-&gt;setFillingLevel();

			//pruefe ob reorganisierung der Tabelle noetig ist
			if ( this-&gt;actualFillingLevel &gt;= this-&gt;maxFillingLevel){
				reorganize();
			}
			return element;
		} else {
			throw EmptyKeyExeption();
		}
	}

};
</code></pre>
<p>das alle starte ich so:</p>
<pre><code class="language-cpp">int main(){
    Hashtable&lt;BspKlasse&gt; map;
    BspKlasse* t = new BspKlasse(&quot;hallo&quot;);
    MString key(&quot;schluessel_1&quot;);
    map.put(key, t);
    return 0;
}
</code></pre>
<p>Ich bekomme dauernd Fehlermeldungen, ich glaube die Template-Syntax ist falsch...</p>
<p>Könnte jemand bitte helfen <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 schon mal und freues neues! :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001398</guid><dc:creator><![CDATA[Dit_]]></dc:creator><pubDate>Sun, 02 Jan 2011 18:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to Templates | richtige Syntax on Sun, 02 Jan 2011 18:44:26 GMT]]></title><description><![CDATA[<p>Probier mal die Operator <code>&lt;&lt;</code> und <code>&gt;&gt;</code> getrennt bei Templates zu schreiben, weil nicht viele Compiler den neuen C++0x-Standard für Templates unterstützen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001400</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 02 Jan 2011 18:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to Templates | richtige Syntax on Sun, 02 Jan 2011 19:25:57 GMT]]></title><description><![CDATA[<p>Dit_ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;class T&gt;
class ListElement {
    ...
    /** Pointer auf ein HashElement */
    T* data;                               // Muss das unbedingt ein Pointer sein?
    ...
/** standardkonstruktor */                 // Nein, kein Standardkonstruktor
ListElement(T* data, ListElement* next){   // Überall doofe Zeiger
    this-&gt;data = data;                     // Keine Initialisierungsliste
    this-&gt;next = next;                     // Konsequente Verwendung von this
}
...
template &lt;typename T&gt;                      // Einmal class, einmal typename. Nimm lieber immer typename
class Hashtable {
  /** Array mit Listen. */
  List&lt;HashElement&lt;T&gt; &gt;** table;           // Bei dir muss auch wirklich alles ein Zeiger sein
}
int main(){
    Hashtable&lt;BspKlasse&gt; map;
    BspKlasse* t = new BspKlasse(&quot;hallo&quot;); // Speicherallokation. Wo das Element wohl gelöscht wird? ...
    MString key(&quot;schluessel_1&quot;);
    map.put(key, t);
    return 0;
}                                          // ... scheinbar gar nicht
                                           // Du hast (mindestens) einen Memory Leak
</code></pre>
</blockquote>
<p>Syntaxfehler kann ich keine erkennen (gib uns dafür die Ausgabe deines Compilers), aber dein Code gefällt mir überhaupt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001423</guid><dc:creator><![CDATA[_to]]></dc:creator><pubDate>Sun, 02 Jan 2011 19:25:57 GMT</pubDate></item></channel></rss>