<?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 error C2664]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich komme hier nicht mehr weiter bekomme den Fehler:</p>
<p>Fehler 2 error C2664: 'Node&lt;T&gt;::Node(const Node&lt;T&gt; &amp;)' : Konvertierung von Argument 1 von 'Medium *' in 'const Node&lt;T&gt; &amp;' nicht möglich h:\dev\c++\workspace\medienverwaltung\medienverwaltung_4.0\medienverwaltung_4.0\medienverwaltung_4.0\mycontainer.h 46 1 Medienverwaltung_4.0</p>
<p>nachdem ich die Klasse als Template definiert habe:<br />
Ich weis nicht was genau der Fehler ist,<br />
liegt es evtl an</p>
<pre><code>template &lt;class T&gt; Node&lt;T&gt;::Node(T *elem, Node&lt;T&gt; *nextNode = NULL){
	this-&gt;elem = elem;
	this-&gt;nextNode = nextNode;
}
</code></pre>
<p>Muss ich dort doch 2 Templateparameter erstellen <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="😕"
    /> <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>
<p>Hier der Code dieser Klasse:</p>
<pre><code>#ifndef MYCONTAINER_H
#define MYCONTAINER_H

#include &quot;medien.h&quot;
using namespace std;

template &lt;class T&gt; class MyContainer;

template &lt;class T&gt; class Node{
	T *elem;
	Node&lt;T&gt; *nextNode;
	friend class MyContainer&lt;T&gt;;
public:
	Node&lt;T&gt;(T *elem, Node&lt;T&gt; *nextNode);//Node *nextNode = NULL Defaultwert siehe definition
};

template &lt;class T&gt; Node&lt;T&gt;::Node(T *elem, Node&lt;T&gt; *nextNode = NULL){
	this-&gt;elem = elem;
	this-&gt;nextNode = nextNode;
}

template &lt;class T&gt; class MyContainer{
	Node&lt;T&gt; *interator = NULL;
	Node&lt;T&gt; *headNode = NULL;
	Node&lt;T&gt; *firstNode = NULL;
public:
	MyContainer();
	bool add(T *contentPtr);			//add(elem: T*)
	bool remove();
	void begin();
	void next();
	T* getItem();				//T* getItem();
	Node&lt;T&gt;* getPredecessorNode();
};//end classprototype 

template &lt;class T&gt; MyContainer&lt;T&gt;::MyContainer(){
	//cout &lt;&lt; &quot;Neuer leerer Container wurde erstellt&quot; &lt;&lt; endl;
}

//Einfügepostition immer ans Ende der Liste
//Nach dem Einfügen ist Interator = 1 Node siehe begin();
template &lt;class T&gt; bool MyContainer&lt;T&gt;::add(T *elem){
	try{
		if (firstNode == NULL &amp;&amp; headNode == NULL){		//erster Node des Containers
			firstNode = new Node&lt;T&gt;(elem);
			firstNode-&gt;elem = elem;
			firstNode-&gt;nextNode = NULL;
			headNode = firstNode;
		}
		else{
			headNode-&gt;nextNode = new Node&lt;T&gt;(elem);
			headNode = headNode-&gt;nextNode;
		}
		begin();
		return true; //erfolgreich 
	}
	catch (bad_alloc){
		cout &lt;&lt; &quot;Fehler bei der Speicherplatzresservierung für neuen Node&quot; &lt;&lt; endl;
		return false;
	}
	catch (...){
		cout &lt;&lt; &quot;Unbekannter Fehler beim Hinzufügen eines neuen Nodes&quot; &lt;&lt; endl;
		return false;
	}
}

template &lt;class T&gt; bool MyContainer&lt;T&gt;::remove(){

	if (interator == NULL){
		return false;//Fehlermeldung =&gt; Container ist leer, keine Elemente (Nodes) vorhanden
	}

	//interator == firstNode == headNode /nur ein Element im Container vorhanden
	else if (interator == firstNode &amp;&amp; headNode == firstNode){
		delete interator; // oder aufruf des deconstruktors
		interator = NULL;
		headNode = NULL;
		firstNode = NULL;
		begin();
	}
	//erstes Element löschen ABER weitere Elemente vorhanden
	else if (interator == firstNode &amp;&amp; headNode != firstNode)
	{
		firstNode = interator-&gt;nextNode;
		delete interator;
		begin();
	}
	//interator == headNode / letztes Element von mehreren
	else if (interator == headNode &amp;&amp; headNode != firstNode){
		headNode = getPredecessorNode();
		getPredecessorNode()-&gt;nextNode = NULL;
		delete interator;
		begin();
	}
	//Element zwischen anderen Elementen
	else if (interator != headNode &amp;&amp; interator != firstNode){
		getPredecessorNode()-&gt;nextNode = interator-&gt;nextNode;
		delete interator;
		begin();
	}
	else{
		return false;
		cout &lt;&lt; &quot;Unbekannter Fehler beim Löschen!&quot; &lt;&lt; endl &lt;&lt; &quot;Zur Sicherheit ihrer Daten wurde der Löschvorgang nicht durchgeführt&quot; &lt;&lt; endl;
	}
	return true;
	/*else{	//element zwischen anderen
	Node *tmp = firstNode;
	while (tmp-&gt;nextNode != NULL &amp;&amp; tmp-&gt;nextNode != interator){
	tmp = tmp-&gt;nextNode;
	}
	if (tmp == NULL){
	return false;
	}

	if (interator == firstNode){
	firstNode = interator-&gt;nextNode;//interator ist erstes element
	}
	else{
	tmp-&gt;nextNode = interator-&gt;nextNode;//hier ist der FEHLER

	}
	delete interator;
	begin();//return
	}*/

	return false;
}

/*
Ermitteln des Vorgänger-Node (enlg. predecessor)
RETURN:		Pointer auf Vorgänger-Node
*/
template &lt;class T&gt; Node&lt;T&gt;* MyContainer&lt;T&gt;::getPredecessorNode(){
	if (interator == firstNode){
		return NULL;
	}
	Node&lt;T&gt; *tmp = firstNode;
	while (tmp-&gt;nextNode != NULL &amp;&amp; tmp-&gt;nextNode != interator){
		tmp = tmp-&gt;nextNode;
	}
	return tmp;
}

template &lt;class T&gt; void MyContainer&lt;T&gt;::begin(){
	interator = firstNode;
}

template &lt;class T&gt; void MyContainer&lt;T&gt;::next(){
	if (MyContainer&lt;T&gt;::getItem() == NULL){
		return;//Fehlermeldung =&gt; Container ist leer, keine Elemente (Nodes) vorhanden
	}
	interator = interator-&gt;nextNode;
}

template &lt;class T&gt; T* MyContainer&lt;T&gt;::getItem(){
	if (interator == NULL){
		return NULL;
	}
	else{ return interator-&gt;elem; }
}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/326246/templates-error-c2664</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 09:29:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326246.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Jun 2014 19:52:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templates error C2664 on Sun, 08 Jun 2014 19:52:51 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich komme hier nicht mehr weiter bekomme den Fehler:</p>
<p>Fehler 2 error C2664: 'Node&lt;T&gt;::Node(const Node&lt;T&gt; &amp;)' : Konvertierung von Argument 1 von 'Medium *' in 'const Node&lt;T&gt; &amp;' nicht möglich h:\dev\c++\workspace\medienverwaltung\medienverwaltung_4.0\medienverwaltung_4.0\medienverwaltung_4.0\mycontainer.h 46 1 Medienverwaltung_4.0</p>
<p>nachdem ich die Klasse als Template definiert habe:<br />
Ich weis nicht was genau der Fehler ist,<br />
liegt es evtl an</p>
<pre><code>template &lt;class T&gt; Node&lt;T&gt;::Node(T *elem, Node&lt;T&gt; *nextNode = NULL){
	this-&gt;elem = elem;
	this-&gt;nextNode = nextNode;
}
</code></pre>
<p>Muss ich dort doch 2 Templateparameter erstellen <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="😕"
    /> <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>
<p>Hier der Code dieser Klasse:</p>
<pre><code>#ifndef MYCONTAINER_H
#define MYCONTAINER_H

#include &quot;medien.h&quot;
using namespace std;

template &lt;class T&gt; class MyContainer;

template &lt;class T&gt; class Node{
	T *elem;
	Node&lt;T&gt; *nextNode;
	friend class MyContainer&lt;T&gt;;
public:
	Node&lt;T&gt;(T *elem, Node&lt;T&gt; *nextNode);//Node *nextNode = NULL Defaultwert siehe definition
};

template &lt;class T&gt; Node&lt;T&gt;::Node(T *elem, Node&lt;T&gt; *nextNode = NULL){
	this-&gt;elem = elem;
	this-&gt;nextNode = nextNode;
}

template &lt;class T&gt; class MyContainer{
	Node&lt;T&gt; *interator = NULL;
	Node&lt;T&gt; *headNode = NULL;
	Node&lt;T&gt; *firstNode = NULL;
public:
	MyContainer();
	bool add(T *contentPtr);			//add(elem: T*)
	bool remove();
	void begin();
	void next();
	T* getItem();				//T* getItem();
	Node&lt;T&gt;* getPredecessorNode();
};//end classprototype 

template &lt;class T&gt; MyContainer&lt;T&gt;::MyContainer(){
	//cout &lt;&lt; &quot;Neuer leerer Container wurde erstellt&quot; &lt;&lt; endl;
}

//Einfügepostition immer ans Ende der Liste
//Nach dem Einfügen ist Interator = 1 Node siehe begin();
template &lt;class T&gt; bool MyContainer&lt;T&gt;::add(T *elem){
	try{
		if (firstNode == NULL &amp;&amp; headNode == NULL){		//erster Node des Containers
			firstNode = new Node&lt;T&gt;(elem);
			firstNode-&gt;elem = elem;
			firstNode-&gt;nextNode = NULL;
			headNode = firstNode;
		}
		else{
			headNode-&gt;nextNode = new Node&lt;T&gt;(elem);
			headNode = headNode-&gt;nextNode;
		}
		begin();
		return true; //erfolgreich 
	}
	catch (bad_alloc){
		cout &lt;&lt; &quot;Fehler bei der Speicherplatzresservierung für neuen Node&quot; &lt;&lt; endl;
		return false;
	}
	catch (...){
		cout &lt;&lt; &quot;Unbekannter Fehler beim Hinzufügen eines neuen Nodes&quot; &lt;&lt; endl;
		return false;
	}
}

template &lt;class T&gt; bool MyContainer&lt;T&gt;::remove(){

	if (interator == NULL){
		return false;//Fehlermeldung =&gt; Container ist leer, keine Elemente (Nodes) vorhanden
	}

	//interator == firstNode == headNode /nur ein Element im Container vorhanden
	else if (interator == firstNode &amp;&amp; headNode == firstNode){
		delete interator; // oder aufruf des deconstruktors
		interator = NULL;
		headNode = NULL;
		firstNode = NULL;
		begin();
	}
	//erstes Element löschen ABER weitere Elemente vorhanden
	else if (interator == firstNode &amp;&amp; headNode != firstNode)
	{
		firstNode = interator-&gt;nextNode;
		delete interator;
		begin();
	}
	//interator == headNode / letztes Element von mehreren
	else if (interator == headNode &amp;&amp; headNode != firstNode){
		headNode = getPredecessorNode();
		getPredecessorNode()-&gt;nextNode = NULL;
		delete interator;
		begin();
	}
	//Element zwischen anderen Elementen
	else if (interator != headNode &amp;&amp; interator != firstNode){
		getPredecessorNode()-&gt;nextNode = interator-&gt;nextNode;
		delete interator;
		begin();
	}
	else{
		return false;
		cout &lt;&lt; &quot;Unbekannter Fehler beim Löschen!&quot; &lt;&lt; endl &lt;&lt; &quot;Zur Sicherheit ihrer Daten wurde der Löschvorgang nicht durchgeführt&quot; &lt;&lt; endl;
	}
	return true;
	/*else{	//element zwischen anderen
	Node *tmp = firstNode;
	while (tmp-&gt;nextNode != NULL &amp;&amp; tmp-&gt;nextNode != interator){
	tmp = tmp-&gt;nextNode;
	}
	if (tmp == NULL){
	return false;
	}

	if (interator == firstNode){
	firstNode = interator-&gt;nextNode;//interator ist erstes element
	}
	else{
	tmp-&gt;nextNode = interator-&gt;nextNode;//hier ist der FEHLER

	}
	delete interator;
	begin();//return
	}*/

	return false;
}

/*
Ermitteln des Vorgänger-Node (enlg. predecessor)
RETURN:		Pointer auf Vorgänger-Node
*/
template &lt;class T&gt; Node&lt;T&gt;* MyContainer&lt;T&gt;::getPredecessorNode(){
	if (interator == firstNode){
		return NULL;
	}
	Node&lt;T&gt; *tmp = firstNode;
	while (tmp-&gt;nextNode != NULL &amp;&amp; tmp-&gt;nextNode != interator){
		tmp = tmp-&gt;nextNode;
	}
	return tmp;
}

template &lt;class T&gt; void MyContainer&lt;T&gt;::begin(){
	interator = firstNode;
}

template &lt;class T&gt; void MyContainer&lt;T&gt;::next(){
	if (MyContainer&lt;T&gt;::getItem() == NULL){
		return;//Fehlermeldung =&gt; Container ist leer, keine Elemente (Nodes) vorhanden
	}
	interator = interator-&gt;nextNode;
}

template &lt;class T&gt; T* MyContainer&lt;T&gt;::getItem(){
	if (interator == NULL){
		return NULL;
	}
	else{ return interator-&gt;elem; }
}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2403034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403034</guid><dc:creator><![CDATA[benschke]]></dc:creator><pubDate>Sun, 08 Jun 2014 19:52:51 GMT</pubDate></item><item><title><![CDATA[Reply to templates error C2664 on Sun, 08 Jun 2014 22:00:39 GMT]]></title><description><![CDATA[<p>Komisch, Medium kommt gar nicht vor ...</p>
<p>Ist bestimmt ein Compilerfehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403042</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 08 Jun 2014 22:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to templates error C2664 on Sun, 08 Jun 2014 22:17:26 GMT]]></title><description><![CDATA[<p>8.3.6/6</p>
<blockquote>
<p>Except for member functions of class templates, the default arguments in a member function definition that<br />
appears outside of the class definition are added to the set of default arguments provided by the member<br />
function declaration in the class definition. <strong>Default arguments for a member function of a class template<br />
shall be specified on the initial declaration of the member function within the class template.</strong></p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2403045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403045</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 08 Jun 2014 22:17:26 GMT</pubDate></item></channel></rss>