<?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 meiner Template Klasse]]></title><description><![CDATA[<p>Sehr geehrte Community,</p>
<p>ich versuche grad eine Gridtemplateklasse zu machen, die eine Triggerfunktion hat, falls sich der Inhalt ändert.</p>
<p>es besteht aus 3 Template klassen</p>
<p>type&lt;T&gt; ist der typ, welcher als Value T aufnimmt und bei veränderung die Funktion hinter dem Pointer void *func steht.</p>
<p>aufruf wird so gemacht</p>
<p>(*this-&gt;func)(this); &lt;-- Gibt zur Funktion ein Pointer von sich selbst ab.</p>
<p>row&lt;T&gt; sind die rows und vererbt std::map&lt;unsigned int,type&lt;T&gt;&gt;</p>
<p>dieser hat auch eine Trigger Funktion und einen Funktionspointer.</p>
<p>die Triggerfunktion wird ausgelöst, wenn type&lt;T&gt; inhalt geändert wird und ruft die Funktion, auf die der funktionspointer zeigt.</p>
<p>(*this-&gt;trigger)(this,i); also auf sich selbst ein Zeiger und den Zeiger auf type.</p>
<p>letzte Template Klasse ist Grid&lt;T&gt;, die std::map&lt;unsigned int,row&lt;T&gt;&gt; vererbt.</p>
<p>Die hat ebenfalls eine Triggerfunktion und einen Funktionspointer<br />
die Triggerfunkion übernimmt die beiden pointer und übergibt den pointer von sich selbst und von row, damit der verarbeitende Funktion weiß wo und welche Daten verändert worden sind.</p>
<p>container.hpp</p>
<pre><code>#ifndef _CONTAINER_HPP
#define _CONTAINER_HPP

#include&lt;map&gt;
#include&lt;iterator&gt;
#include&lt;memory&gt;
#include&lt;typeinfo&gt;

#define me (*this)

#define destroymap std::map&lt;std::string,void (*)()&gt;

namespace WINAPIpp
{
	namespace TEMPLATES
	{
		template&lt;class T, class U, class V&gt;
		class Triplet
		{
		private:
			T first;
			U second;
			V third;
			destroymap destroy;
		protected:
		public:
			Triplet(T, U, V);
			Triplet(T * (*f1)(), U *(*f2)(), V *(*f3)());
			~Triplet();
			std::shared_ptr&lt;T&gt; getFirst();
			std::shared_ptr&lt;U&gt; getSecond();
			std::shared_ptr&lt;V&gt; getThird();
		};

		template&lt;class T&gt;
		class type
		{
		private:
			T data;
			void* func;
		protected:
		public:
			type(void(*trigger)(type&lt;T&gt;*));
			~type(){ delete this-&gt;func; }

			//void the type;

			//operator overloading
			T&amp; operator=(const T&amp; rhs);
			T&amp; operator++(int);
			T operator+(T&amp; rhs);
			T&amp; operator--(int rhs);
			T operator-(T&amp; rhs);
			//T&amp; operator+=(const T&amp; rhs);
			//T&amp; operator-=(const T&amp; rhs);
			//T&amp; operator*=(const T&amp; rhs);
			//T&amp; operator/=(const T&amp; rhs);
			T operator*(const T&amp; rhs);
			T operator/(const T&amp; rhs);
		};

		template&lt;class T&gt;
		class row : public std::map&lt;unsigned int, type&lt;T&gt;&gt;
		{
		public:
			row(void(*trigger)(row&lt;T&gt;*));
			//row(T, void(*trigger)(row&lt;T&gt;*));
			~row(){}
			void insert(T);
		protected:
			//void append_rows(unsigned int n);
			//void delete_row(unsigned int,bool = true);
			void append_trigger(void(*trigger)(row&lt;T&gt;*));
			void trigger_func(type&lt;T&gt;* ptr);
		private:
			void* trigger;
		};

		template&lt;class T&gt;
		class Grid : public std::map&lt;unsigned int, row&lt;T&gt;&gt;
		{
		private:
			void* trigger;
		protected:
			void trigger_func(row&lt;T&gt;*);
		public:
			Grid(void(*mytrigger)(Grid&lt;T&gt;*, row&lt;T&gt;*));
			//Grid(T);
			~Grid(){}
			void append_trigger( void(*f)(Grid&lt;T&gt;*,row&lt;T&gt;*));

		};
	}
}

#endif
</code></pre>
<p>container.cpp</p>
<pre><code>#include&quot;container.hpp&quot;
#include&lt;type_traits&gt;

using namespace WINAPIpp::TEMPLATES;

//TYPE

template&lt;class T&gt;
type&lt;T&gt;::type(void(*trigger)(type&lt;T&gt; *))
{
	this-&gt;func = trigger;
}

template&lt;class T&gt;
T&amp; type&lt;T&gt;::operator=(const T&amp; rhs)
{
	this-&gt;data = rhs;
	if (this-&gt;func != NULL)
		(*this-&gt;func)(this);
	return this;
}

template&lt;class T&gt;
T&amp; type&lt;T&gt;::operator++(int rhs)
{
	this-&gt;data = this-&gt;data + (T)rhs;
	if (this-&gt;func != NULL)
		(*this-&gt;func)(this);
	return rhs;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator+(T&amp; rhs)
{
	T tmp = this-&gt;data + rhs.data;
	return tmp;
}

template&lt;class T&gt;
T&amp; type&lt;T&gt;::operator--(int rhs)
{
	this-&gt;data = this-&gt;data - (T)rhs;
	if (this-&gt;func != NULL)
		(*this-&gt;func)(this);
	return this;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator-(T&amp; rhs)
{
	T tmp = this-&gt;data - rhs.data;

	return this;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator*(const T&amp; rhs)
{
	T tmp = this-&gt;data * rhs.data;
	return tmp;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator/(const T&amp; rhs)
{
	T tmp = this-&gt;data / rhs.data;
	return tmp;
}

//row

template&lt;class T&gt;
void row&lt;T&gt;::trigger_func(type&lt;T&gt;* ptr)
{
	row&lt;T&gt;::iterator iter(ptr);
	(*this-&gt;trigger)(&amp;(*iter));
}

template&lt;class T&gt;
row&lt;T&gt;::row(void(*trigger)(row&lt;T&gt;*))
{
	this-&gt;trigger = trigger;
}

template&lt;class T&gt;
void row&lt;T&gt;::insert(T value)
{
	if (this-&gt;size() != 0)
	{
		type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
		tmp = value;
		me[(this-&gt;rbegin()-&gt;first + 1)] = T;
	}
	else
	{
		type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
		me[0] = tmp;
	}
}

template&lt;class T&gt;
void row&lt;T&gt;::append_trigger(void(*trigger)(row&lt;T&gt;*))
{
	me.trigger = trigger;
}

//grid

template&lt;class T&gt;
void Grid&lt;T&gt;::trigger_func(row&lt;T&gt;* iter)
{
	Grid&lt;T&gt;::iterator i(iter);
	(*this-&gt;trigger)(&amp;(*i),iter);
}

template&lt;class T&gt;
Grid&lt;T&gt;::Grid(void(*mytrigger)(Grid&lt;T&gt;*, row&lt;T&gt;*))
{
	me.trigger = mytrigger;
}

template&lt;class T&gt;
void Grid&lt;T&gt;::append_trigger(void(*f)(Grid&lt;T&gt;*, row&lt;T&gt;*))
{
	me.trigger = f;
}

//TRIPLET
template&lt;class T, class U, class V&gt;
Triplet&lt;T,U,V&gt;::~Triplet()
{
	if (this-&gt;destroy.find(typeid(T)) != this-&gt;destroy.end())
	{
		this-&gt;destroy[typeid(T)]();
	}
	else
	{
		if (std::is_pointer&lt;T&gt;::value)
			delete this-&gt;first;
		else
			delete &amp;this-&gt;first;
	}
	if (this-&gt;destroy.find(typeid(U)) != this-&gt;destroy.end())
	{
		this-&gt;destroy[typeid(U)]();
	}
	else
	{
		if (std::is_pointer&lt;U&gt;::value)
			delete this-&gt;second;
		else
			delete &amp;this-&gt;second;
	}
	if (this-&gt;destroy.find(typeid(V)) != this-&gt;destroy.end())
		this-&gt;destroy[typeid(V)]();
	else
	{
		if (std::is_pointer&lt;V&gt;::value)
			delete this-&gt;third;
		else
			delete &amp;this-&gt;third;
	}
}

template&lt;class T,class U,class V&gt;
std::shared_ptr&lt;T&gt; Triplet&lt;T, U, V&gt;::getFirst()
{
	return std::shared_ptr&lt;T&gt;(this-&gt;first);
}

template&lt;class T, class U, class V&gt;
std::shared_ptr&lt;U&gt; Triplet&lt;T, U, V&gt;::getSecond()
{
	return std::shared_ptr&lt;U&gt;(this-&gt;second);
}

template&lt;class T, class U, class V&gt;
std::shared_ptr&lt;V&gt; Triplet&lt;T, U, V&gt;::getThird()
{
	return std::shared_ptr&lt;V&gt;(this-&gt;Third);
}
</code></pre>
<p>Quelle.cpp (beinhaltet die main)</p>
<pre><code>#include&quot;container.hpp&quot;
#include&lt;iostream&gt;
using namespace WINAPIpp::TEMPLATES;

void trigger(Grid&lt;int&gt;*, row&lt;int&gt;*);

int main()
{
	Grid&lt;int&gt; test(&amp;trigger);
}

void trigger(Grid&lt;int&gt;* p, row&lt;int&gt;* x)
{
	std::cout &lt;&lt; &quot;Triggered&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Der Namespace WINAPIpp und TEMPLATES habe ich gewählt, weil das hier ein Teil eines größeren Projektes sein wird.</p>
<p>Es ist auch nicht fertig. Wollte eigentlich nur mal testen, ob es läuft. Aber es kommt ein Linker Error, weiß nur nicht, wo der Fehler ist.</p>
<p>`Fehler	1	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: __thiscall WINAPIpp::TEMPLATES::Grid&lt;int&gt;::Grid&lt;int&gt;(void (__cdecl*)(class WINAPIpp::TEMPLATES::Grid&lt;int&gt; *,class WINAPIpp::TEMPLATES::row&lt;int&gt; *))&quot; (??0?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>G</mi><mi>r</mi><mi>i</mi><mi>d</mi><mi mathvariant="normal">@</mi><mi>H</mi><mi mathvariant="normal">@</mi><mi>T</mi><mi>E</mi><mi>M</mi><mi>P</mi><mi>L</mi><mi>A</mi><mi>T</mi><mi>E</mi><mi>S</mi><mi mathvariant="normal">@</mi><mi>W</mi><mi>I</mi><mi>N</mi><mi>A</mi><mi>P</mi><mi>I</mi><mi>p</mi><mi>p</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>Q</mi><mi>A</mi><mi>E</mi><mi mathvariant="normal">@</mi><mi>P</mi><mn>6</mn><mi>A</mi><mi>X</mi><mi>P</mi><mi>A</mi><mi>V</mi><mn>0</mn><mn>1</mn><mn>2</mn><mi mathvariant="normal">@</mi><mi>P</mi><mi>A</mi><mi>V</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">Grid@H@TEMPLATES@WINAPIpp@@QAE@P6AXPAV012@PAV?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">G</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">d</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.08125em;">H</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">T</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathit" style="margin-right:0.10903em;">M</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">L</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.13889em;">T</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathit" style="margin-right:0.05764em;">S</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">W</span><span class="mord mathit" style="margin-right:0.07847em;">I</span><span class="mord mathit" style="margin-right:0.10903em;">N</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit" style="margin-right:0.07847em;">I</span><span class="mord mathit">p</span><span class="mord mathit">p</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit">Q</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathrm">6</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.07847em;">X</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathrm">0</span><span class="mord mathrm">1</span><span class="mord mathrm">2</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mclose">?</span></span></span></span>row@H@12@@Z@Z)&quot; in Funktion &quot;_main&quot;.	C:\Users\Platz1300\documents\visual studio 2013\Projects\container\container\Quelle.obj	container</p>
<p>`</p>
<p>Ich schätze mal, es gibt ein Prototyp, der keine Definition hat, sehe aber nicht welche Funktion es sein soll. Laut VS2013 soll der Konstruktor von Grid&lt;T&gt; eine Überladung haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Danke für die Hilfe</p>
<p>Mit freundlichen Grüßen<br />
Sepultura</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324324/problem-mit-meiner-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 15:27:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324324.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Mar 2014 13:38:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 13:38:44 GMT]]></title><description><![CDATA[<p>Sehr geehrte Community,</p>
<p>ich versuche grad eine Gridtemplateklasse zu machen, die eine Triggerfunktion hat, falls sich der Inhalt ändert.</p>
<p>es besteht aus 3 Template klassen</p>
<p>type&lt;T&gt; ist der typ, welcher als Value T aufnimmt und bei veränderung die Funktion hinter dem Pointer void *func steht.</p>
<p>aufruf wird so gemacht</p>
<p>(*this-&gt;func)(this); &lt;-- Gibt zur Funktion ein Pointer von sich selbst ab.</p>
<p>row&lt;T&gt; sind die rows und vererbt std::map&lt;unsigned int,type&lt;T&gt;&gt;</p>
<p>dieser hat auch eine Trigger Funktion und einen Funktionspointer.</p>
<p>die Triggerfunktion wird ausgelöst, wenn type&lt;T&gt; inhalt geändert wird und ruft die Funktion, auf die der funktionspointer zeigt.</p>
<p>(*this-&gt;trigger)(this,i); also auf sich selbst ein Zeiger und den Zeiger auf type.</p>
<p>letzte Template Klasse ist Grid&lt;T&gt;, die std::map&lt;unsigned int,row&lt;T&gt;&gt; vererbt.</p>
<p>Die hat ebenfalls eine Triggerfunktion und einen Funktionspointer<br />
die Triggerfunkion übernimmt die beiden pointer und übergibt den pointer von sich selbst und von row, damit der verarbeitende Funktion weiß wo und welche Daten verändert worden sind.</p>
<p>container.hpp</p>
<pre><code>#ifndef _CONTAINER_HPP
#define _CONTAINER_HPP

#include&lt;map&gt;
#include&lt;iterator&gt;
#include&lt;memory&gt;
#include&lt;typeinfo&gt;

#define me (*this)

#define destroymap std::map&lt;std::string,void (*)()&gt;

namespace WINAPIpp
{
	namespace TEMPLATES
	{
		template&lt;class T, class U, class V&gt;
		class Triplet
		{
		private:
			T first;
			U second;
			V third;
			destroymap destroy;
		protected:
		public:
			Triplet(T, U, V);
			Triplet(T * (*f1)(), U *(*f2)(), V *(*f3)());
			~Triplet();
			std::shared_ptr&lt;T&gt; getFirst();
			std::shared_ptr&lt;U&gt; getSecond();
			std::shared_ptr&lt;V&gt; getThird();
		};

		template&lt;class T&gt;
		class type
		{
		private:
			T data;
			void* func;
		protected:
		public:
			type(void(*trigger)(type&lt;T&gt;*));
			~type(){ delete this-&gt;func; }

			//void the type;

			//operator overloading
			T&amp; operator=(const T&amp; rhs);
			T&amp; operator++(int);
			T operator+(T&amp; rhs);
			T&amp; operator--(int rhs);
			T operator-(T&amp; rhs);
			//T&amp; operator+=(const T&amp; rhs);
			//T&amp; operator-=(const T&amp; rhs);
			//T&amp; operator*=(const T&amp; rhs);
			//T&amp; operator/=(const T&amp; rhs);
			T operator*(const T&amp; rhs);
			T operator/(const T&amp; rhs);
		};

		template&lt;class T&gt;
		class row : public std::map&lt;unsigned int, type&lt;T&gt;&gt;
		{
		public:
			row(void(*trigger)(row&lt;T&gt;*));
			//row(T, void(*trigger)(row&lt;T&gt;*));
			~row(){}
			void insert(T);
		protected:
			//void append_rows(unsigned int n);
			//void delete_row(unsigned int,bool = true);
			void append_trigger(void(*trigger)(row&lt;T&gt;*));
			void trigger_func(type&lt;T&gt;* ptr);
		private:
			void* trigger;
		};

		template&lt;class T&gt;
		class Grid : public std::map&lt;unsigned int, row&lt;T&gt;&gt;
		{
		private:
			void* trigger;
		protected:
			void trigger_func(row&lt;T&gt;*);
		public:
			Grid(void(*mytrigger)(Grid&lt;T&gt;*, row&lt;T&gt;*));
			//Grid(T);
			~Grid(){}
			void append_trigger( void(*f)(Grid&lt;T&gt;*,row&lt;T&gt;*));

		};
	}
}

#endif
</code></pre>
<p>container.cpp</p>
<pre><code>#include&quot;container.hpp&quot;
#include&lt;type_traits&gt;

using namespace WINAPIpp::TEMPLATES;

//TYPE

template&lt;class T&gt;
type&lt;T&gt;::type(void(*trigger)(type&lt;T&gt; *))
{
	this-&gt;func = trigger;
}

template&lt;class T&gt;
T&amp; type&lt;T&gt;::operator=(const T&amp; rhs)
{
	this-&gt;data = rhs;
	if (this-&gt;func != NULL)
		(*this-&gt;func)(this);
	return this;
}

template&lt;class T&gt;
T&amp; type&lt;T&gt;::operator++(int rhs)
{
	this-&gt;data = this-&gt;data + (T)rhs;
	if (this-&gt;func != NULL)
		(*this-&gt;func)(this);
	return rhs;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator+(T&amp; rhs)
{
	T tmp = this-&gt;data + rhs.data;
	return tmp;
}

template&lt;class T&gt;
T&amp; type&lt;T&gt;::operator--(int rhs)
{
	this-&gt;data = this-&gt;data - (T)rhs;
	if (this-&gt;func != NULL)
		(*this-&gt;func)(this);
	return this;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator-(T&amp; rhs)
{
	T tmp = this-&gt;data - rhs.data;

	return this;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator*(const T&amp; rhs)
{
	T tmp = this-&gt;data * rhs.data;
	return tmp;
}

template&lt;class T&gt;
T type&lt;T&gt;::operator/(const T&amp; rhs)
{
	T tmp = this-&gt;data / rhs.data;
	return tmp;
}

//row

template&lt;class T&gt;
void row&lt;T&gt;::trigger_func(type&lt;T&gt;* ptr)
{
	row&lt;T&gt;::iterator iter(ptr);
	(*this-&gt;trigger)(&amp;(*iter));
}

template&lt;class T&gt;
row&lt;T&gt;::row(void(*trigger)(row&lt;T&gt;*))
{
	this-&gt;trigger = trigger;
}

template&lt;class T&gt;
void row&lt;T&gt;::insert(T value)
{
	if (this-&gt;size() != 0)
	{
		type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
		tmp = value;
		me[(this-&gt;rbegin()-&gt;first + 1)] = T;
	}
	else
	{
		type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
		me[0] = tmp;
	}
}

template&lt;class T&gt;
void row&lt;T&gt;::append_trigger(void(*trigger)(row&lt;T&gt;*))
{
	me.trigger = trigger;
}

//grid

template&lt;class T&gt;
void Grid&lt;T&gt;::trigger_func(row&lt;T&gt;* iter)
{
	Grid&lt;T&gt;::iterator i(iter);
	(*this-&gt;trigger)(&amp;(*i),iter);
}

template&lt;class T&gt;
Grid&lt;T&gt;::Grid(void(*mytrigger)(Grid&lt;T&gt;*, row&lt;T&gt;*))
{
	me.trigger = mytrigger;
}

template&lt;class T&gt;
void Grid&lt;T&gt;::append_trigger(void(*f)(Grid&lt;T&gt;*, row&lt;T&gt;*))
{
	me.trigger = f;
}

//TRIPLET
template&lt;class T, class U, class V&gt;
Triplet&lt;T,U,V&gt;::~Triplet()
{
	if (this-&gt;destroy.find(typeid(T)) != this-&gt;destroy.end())
	{
		this-&gt;destroy[typeid(T)]();
	}
	else
	{
		if (std::is_pointer&lt;T&gt;::value)
			delete this-&gt;first;
		else
			delete &amp;this-&gt;first;
	}
	if (this-&gt;destroy.find(typeid(U)) != this-&gt;destroy.end())
	{
		this-&gt;destroy[typeid(U)]();
	}
	else
	{
		if (std::is_pointer&lt;U&gt;::value)
			delete this-&gt;second;
		else
			delete &amp;this-&gt;second;
	}
	if (this-&gt;destroy.find(typeid(V)) != this-&gt;destroy.end())
		this-&gt;destroy[typeid(V)]();
	else
	{
		if (std::is_pointer&lt;V&gt;::value)
			delete this-&gt;third;
		else
			delete &amp;this-&gt;third;
	}
}

template&lt;class T,class U,class V&gt;
std::shared_ptr&lt;T&gt; Triplet&lt;T, U, V&gt;::getFirst()
{
	return std::shared_ptr&lt;T&gt;(this-&gt;first);
}

template&lt;class T, class U, class V&gt;
std::shared_ptr&lt;U&gt; Triplet&lt;T, U, V&gt;::getSecond()
{
	return std::shared_ptr&lt;U&gt;(this-&gt;second);
}

template&lt;class T, class U, class V&gt;
std::shared_ptr&lt;V&gt; Triplet&lt;T, U, V&gt;::getThird()
{
	return std::shared_ptr&lt;V&gt;(this-&gt;Third);
}
</code></pre>
<p>Quelle.cpp (beinhaltet die main)</p>
<pre><code>#include&quot;container.hpp&quot;
#include&lt;iostream&gt;
using namespace WINAPIpp::TEMPLATES;

void trigger(Grid&lt;int&gt;*, row&lt;int&gt;*);

int main()
{
	Grid&lt;int&gt; test(&amp;trigger);
}

void trigger(Grid&lt;int&gt;* p, row&lt;int&gt;* x)
{
	std::cout &lt;&lt; &quot;Triggered&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Der Namespace WINAPIpp und TEMPLATES habe ich gewählt, weil das hier ein Teil eines größeren Projektes sein wird.</p>
<p>Es ist auch nicht fertig. Wollte eigentlich nur mal testen, ob es läuft. Aber es kommt ein Linker Error, weiß nur nicht, wo der Fehler ist.</p>
<p>`Fehler	1	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: __thiscall WINAPIpp::TEMPLATES::Grid&lt;int&gt;::Grid&lt;int&gt;(void (__cdecl*)(class WINAPIpp::TEMPLATES::Grid&lt;int&gt; *,class WINAPIpp::TEMPLATES::row&lt;int&gt; *))&quot; (??0?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>G</mi><mi>r</mi><mi>i</mi><mi>d</mi><mi mathvariant="normal">@</mi><mi>H</mi><mi mathvariant="normal">@</mi><mi>T</mi><mi>E</mi><mi>M</mi><mi>P</mi><mi>L</mi><mi>A</mi><mi>T</mi><mi>E</mi><mi>S</mi><mi mathvariant="normal">@</mi><mi>W</mi><mi>I</mi><mi>N</mi><mi>A</mi><mi>P</mi><mi>I</mi><mi>p</mi><mi>p</mi><mi mathvariant="normal">@</mi><mi mathvariant="normal">@</mi><mi>Q</mi><mi>A</mi><mi>E</mi><mi mathvariant="normal">@</mi><mi>P</mi><mn>6</mn><mi>A</mi><mi>X</mi><mi>P</mi><mi>A</mi><mi>V</mi><mn>0</mn><mn>1</mn><mn>2</mn><mi mathvariant="normal">@</mi><mi>P</mi><mi>A</mi><mi>V</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">Grid@H@TEMPLATES@WINAPIpp@@QAE@P6AXPAV012@PAV?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">G</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">d</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.08125em;">H</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">T</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathit" style="margin-right:0.10903em;">M</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">L</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.13889em;">T</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathit" style="margin-right:0.05764em;">S</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">W</span><span class="mord mathit" style="margin-right:0.07847em;">I</span><span class="mord mathit" style="margin-right:0.10903em;">N</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit" style="margin-right:0.07847em;">I</span><span class="mord mathit">p</span><span class="mord mathit">p</span><span class="mord mathrm">@</span><span class="mord mathrm">@</span><span class="mord mathit">Q</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathrm">6</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.07847em;">X</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mord mathrm">0</span><span class="mord mathrm">1</span><span class="mord mathrm">2</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.22222em;">V</span><span class="mclose">?</span></span></span></span>row@H@12@@Z@Z)&quot; in Funktion &quot;_main&quot;.	C:\Users\Platz1300\documents\visual studio 2013\Projects\container\container\Quelle.obj	container</p>
<p>`</p>
<p>Ich schätze mal, es gibt ein Prototyp, der keine Definition hat, sehe aber nicht welche Funktion es sein soll. Laut VS2013 soll der Konstruktor von Grid&lt;T&gt; eine Überladung haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Danke für die Hilfe</p>
<p>Mit freundlichen Grüßen<br />
Sepultura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388447</guid><dc:creator><![CDATA[Sepultura]]></dc:creator><pubDate>Wed, 12 Mar 2014 13:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 14:00:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Der Namespace WINAPIpp und TEMPLATES habe ich gewählt, weil das hier ein Teil eines größeren Projektes sein wird</p>
</blockquote>
<p>Normalerweise wird das Modul nicht nach den benutzen Techniken benannt.</p>
<p>Weiterhin muss die Definition eines Templates ueberall dort bekannt sein, wo sie auch genutzt wird. Im einfachsten Fall erreicht man das, indem Deklaration und Definition sich in der gleichen Headerdatei befinden, d.h. Inhalt von <code>container.cpp</code> in <code>container.h</code> packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388450</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 12 Mar 2014 14:00:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 14:56:23 GMT]]></title><description><![CDATA[<p>aber außerhalb der class Grid{} dürfen die Funktionen sein? Also ich würde sie ganz unten anhängen.</p>
<p>Die Namespaces habe ich so gewählt:</p>
<p>WINAPIpp &lt;- Mein Projekt, ein Wrapper für WINAPI</p>
<p>Es gibt schon:</p>
<p>WINAPIpp::Registry Namespace<br />
die Registry Operationen macht</p>
<p>WINAPIpp::PROCESS Namespace<br />
mit Klassen<br />
ProcessContainer<br />
Process</p>
<p>für laufende Laufende Processe</p>
<p>und die TEMPLATES Namespace sind halt für zusätzliche Klassen da. Da ProcessContainer einen Trigger braucht, habe ich diese Klassen zur erlernung davon gestartet.</p>
<p>Mit freundlichen Grüßen<br />
Sepultura</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388464</guid><dc:creator><![CDATA[Sepultura]]></dc:creator><pubDate>Wed, 12 Mar 2014 14:56:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 15:24:32 GMT]]></title><description><![CDATA[<p>Es heißt nicht &quot;Template Klasse&quot;. Das macht doch keinen Sinn! Übersetz das mal: &quot;Schablonenklasse&quot;? Nee! &quot;Klassenschablone&quot;? Ja. --&gt; Klassen-Template</p>
<p>Die Fehlermeldung vom Linker siehst Du deswegen, weil Du sehr wahrscheinlich die ODR (one-definition-rule) nicht beachtet hast. Bin da jetzt nur drüber geflogen, aber man sieht sofort, dass das meiste wenn nicht alles aus <code>container.cpp</code> da nicht hingehört.</p>
<p>Siehe<br />
<a href="http://www.linuxtopia.org/online_books/programming_books/c++_practical_programming/c++_practical_programming_134.html" rel="nofollow">http://www.linuxtopia.org/online_books/programming_books/c++_practical_programming/c++_practical_programming_134.html</a></p>
<p>Und siehe:<br />
ODR (in einem C++ Buch Deiner Wahl)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388472</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Wed, 12 Mar 2014 15:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 18:24:08 GMT]]></title><description><![CDATA[<p>Hallo, hier die bessere Edition:</p>
<p>container.hpp</p>
<pre><code>#ifndef _CONTAINER_HPP
#define _CONTAINER_HPP

#include&lt;map&gt;
#include&lt;iterator&gt;
#include&lt;memory&gt;
#include&lt;typeinfo&gt;

#define me (*this)

#define destroymap std::map&lt;std::string,void (*)()&gt;

namespace WINAPIpp
{
	namespace TEMPLATES
	{
		template&lt;class T, class U, class V&gt;
		class Triplet
		{
		private:
			T first;
			U second;
			V third;
			destroymap destroy;
		protected:
		public:
			Triplet(T, U, V);
			Triplet(T * (*f1)(), U *(*f2)(), V *(*f3)());
			~Triplet();
			std::shared_ptr&lt;T&gt; getFirst();
			std::shared_ptr&lt;U&gt; getSecond();
			std::shared_ptr&lt;V&gt; getThird();
		};

		template&lt;class T&gt;
		class type
		{
		private:
			T data;
			void* func;
		protected:
		public:
			type(void(*trigger)(type&lt;T&gt;*));
			~type(){ delete this-&gt;func; }

			//void the type;

			//operator overloading
			T&amp; operator=(T&amp; rhs);
			T&amp; operator++(int);
			T operator+(T&amp; rhs);
			T&amp; operator--(int rhs);
			T operator-(T&amp; rhs);
			//T&amp; operator+=(const T&amp; rhs);
			//T&amp; operator-=(const T&amp; rhs);
			//T&amp; operator*=(const T&amp; rhs);
			//T&amp; operator/=(const T&amp; rhs);
			T operator*(const T&amp; rhs);
			T operator/(const T&amp; rhs);
		};

		template&lt;class T&gt;
		class row : public std::map&lt;unsigned int, type&lt;T&gt;&gt;
		{
		public:
			row(void(*trigger)(row&lt;T&gt;*));
			//row(T, void(*trigger)(row&lt;T&gt;*));
			~row(){}
			void insert(T);
		protected:
			//void append_rows(unsigned int n);
			//void delete_row(unsigned int,bool = true);
			void append_trigger(void(*trigger)(row&lt;T&gt;*));
			void trigger_func(type&lt;T&gt;* ptr);
		private:
			void* trigger;
		};

		template&lt;class T&gt;
		class Grid : public std::map&lt;unsigned int, row&lt;T&gt;&gt;
		{
		private:
			void* trigger;
		protected:
			void trigger_func(row&lt;T&gt;*);
		public:
			Grid(void(*mytrigger)(Grid&lt;T&gt;*, row&lt;T&gt;*));
			//Grid(T);
			~Grid(){}
			void append_trigger(void(*f)(Grid&lt;T&gt;*, row&lt;T&gt;*));
			void insert(T);

		};

		template&lt;class T&gt;
		type&lt;T&gt;::type(void(*trigger)(type&lt;T&gt; *))
		{
			this-&gt;func = trigger;
		}

		template&lt;class T&gt;
		T&amp; type&lt;T&gt;::operator=(T&amp; rhs)
		{
			this-&gt;data = rhs;
			if (this-&gt;func != NULL)
				(*this-&gt;func)(this);
			return this;
		}

		template&lt;class T&gt;
		T&amp; type&lt;T&gt;::operator++(int rhs)
		{
			this-&gt;data = this-&gt;data + (T)rhs;
			if (this-&gt;func != NULL)
				(*this-&gt;func)(this);
			return rhs;
		}

		template&lt;class T&gt;
		T type&lt;T&gt;::operator+(T&amp; rhs)
		{
			T tmp = this-&gt;data + rhs.data;
			return tmp;
		}

		template&lt;class T&gt;
		T&amp; type&lt;T&gt;::operator--(int rhs)
		{
			this-&gt;data = this-&gt;data - (T)rhs;
			if (this-&gt;func != NULL)
				(*this-&gt;func)(this);
			return this;
		}

		template&lt;class T&gt;
		T type&lt;T&gt;::operator-(T&amp; rhs)
		{
			T tmp = this-&gt;data - rhs.data;

			return this;
		}

		template&lt;class T&gt;
		T type&lt;T&gt;::operator*(const T&amp; rhs)
		{
			T tmp = this-&gt;data * rhs.data;
			return tmp;
		}

		template&lt;class T&gt;
		T type&lt;T&gt;::operator/(const T&amp; rhs)
		{
			T tmp = this-&gt;data / rhs.data;
			return tmp;
		}

		//row

		template&lt;class T&gt;
		void row&lt;T&gt;::trigger_func(type&lt;T&gt;* ptr)
		{
			row&lt;T&gt;::iterator iter(ptr);
			(*this-&gt;trigger)(&amp;(*iter));
		}

		template&lt;class T&gt;
		row&lt;T&gt;::row(void(*trigger)(row&lt;T&gt;*))
		{
			this-&gt;trigger = trigger;
		}

		template&lt;class T&gt;
		void row&lt;T&gt;::insert(T value)
		{
			if (this-&gt;size() != 0)
			{
				type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
				tmp = value;
				me[(this-&gt;rbegin()-&gt;first + 1)] = value;
			}
			else
			{
				type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
				me[0] = tmp;
			}
		}

		template&lt;class T&gt;
		void row&lt;T&gt;::append_trigger(void(*trigger)(row&lt;T&gt;*))
		{
			me.trigger = trigger;
		}

		//grid

		template&lt;class T&gt;
		void Grid&lt;T&gt;::trigger_func(row&lt;T&gt;* iter)
		{
			Grid&lt;T&gt;::iterator i(iter);
			(*this-&gt;trigger)(&amp;(*i), iter);
		}

		template&lt;class T&gt;
		Grid&lt;T&gt;::Grid(void(*mytrigger)(Grid&lt;T&gt;*, row&lt;T&gt;*))
		{
			me.trigger = mytrigger;
		}

		template&lt;class T&gt;
		void Grid&lt;T&gt;::append_trigger(void(*f)(Grid&lt;T&gt;*, row&lt;T&gt;*))
		{
			me.trigger = f;
		}

		template&lt;class T&gt;
		void Grid&lt;T&gt;::insert(T value)
		{
			if (this-&gt;size() == 0)
				me[0].insert(value);
			else
				me[me.rbegin()-&gt;first + 1].insert(value);
		}

		//TRIPLET
		template&lt;class T, class U, class V&gt;
		Triplet&lt;T, U, V&gt;::~Triplet()
		{
			if (this-&gt;destroy.find(typeid(T)) != this-&gt;destroy.end())
			{
				this-&gt;destroy[typeid(T)]();
			}
			else
			{
				if (std::is_pointer&lt;T&gt;::value)
					delete this-&gt;first;
				else
					delete &amp;this-&gt;first;
			}
			if (this-&gt;destroy.find(typeid(U)) != this-&gt;destroy.end())
			{
				this-&gt;destroy[typeid(U)]();
			}
			else
			{
				if (std::is_pointer&lt;U&gt;::value)
					delete this-&gt;second;
				else
					delete &amp;this-&gt;second;
			}
			if (this-&gt;destroy.find(typeid(V)) != this-&gt;destroy.end())
				this-&gt;destroy[typeid(V)]();
			else
			{
				if (std::is_pointer&lt;V&gt;::value)
					delete this-&gt;third;
				else
					delete &amp;this-&gt;third;
			}
		}

		template&lt;class T, class U, class V&gt;
		std::shared_ptr&lt;T&gt; Triplet&lt;T, U, V&gt;::getFirst()
		{
			return std::shared_ptr&lt;T&gt;(this-&gt;first);
		}

		template&lt;class T, class U, class V&gt;
		std::shared_ptr&lt;U&gt; Triplet&lt;T, U, V&gt;::getSecond()
		{
			return std::shared_ptr&lt;U&gt;(this-&gt;second);
		}

		template&lt;class T, class U, class V&gt;
		std::shared_ptr&lt;V&gt; Triplet&lt;T, U, V&gt;::getThird()
		{
			return std::shared_ptr&lt;V&gt;(this-&gt;Third);
		}
	}
}

#endif
</code></pre>
<p>Quelle.cpp</p>
<pre><code>#include&quot;container.hpp&quot;
#include&lt;iostream&gt;
using namespace WINAPIpp::TEMPLATES;

void trigger(Grid&lt;int&gt;*, row&lt;int&gt;*);

int main()
{
	Grid&lt;int&gt; test(&amp;trigger);
	test.insert(10);
	system(&quot;pause&quot;);
	return 0;
}

void trigger(Grid&lt;int&gt;* p, row&lt;int&gt;* x)
{
	std::cout &lt;&lt; &quot;Triggered&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>jetzt meckert er bei Zeile 178 und 184.</p>
<pre><code>type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
</code></pre>
<pre><code>type&lt;T&gt; tmp(&amp;row&lt;T&gt;::trigger_func);
</code></pre>
<p>mit den Fehlern:</p>
<p>`Fehler	1	error C2664: 'WINAPIpp::TEMPLATES::type&lt;T&gt;::type(const WINAPIpp::TEMPLATES::type&lt;T&gt; &amp;)' : Konvertierung von Argument 1 von 'void (__thiscall WINAPIpp::TEMPLATES::row&lt;int&gt;::* )(WINAPIpp::TEMPLATES::type&lt;T&gt; *)' in 'void (__cdecl *)(WINAPIpp::TEMPLATES::type&lt;T&gt; *)' nicht möglich	c:\users\owner\documents\visual studio 2013\projects\template\template\container.hpp	178	1	TEMPLATE</p>
<p>`</p>
<p>und</p>
<p>`Fehler	2	error C2664: 'WINAPIpp::TEMPLATES::type&lt;T&gt;::type(const WINAPIpp::TEMPLATES::type&lt;T&gt; &amp;)' : Konvertierung von Argument 1 von 'void (__thiscall WINAPIpp::TEMPLATES::row&lt;int&gt;::* )(WINAPIpp::TEMPLATES::type&lt;T&gt; *)' in 'void (__cdecl *)(WINAPIpp::TEMPLATES::type&lt;T&gt; *)' nicht möglich	c:\users\owner\documents\visual studio 2013\projects\template\template\container.hpp	184	1	TEMPLATE</p>
<p>`</p>
<p>Was ist an den Trigger Funktionen bzw. deren Pointern falsch?</p>
<p>Mit freundlichen Grüßen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388491</guid><dc:creator><![CDATA[Sepultura]]></dc:creator><pubDate>Wed, 12 Mar 2014 18:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 18:45:50 GMT]]></title><description><![CDATA[<p>Du kannst keinen Memberfunktionspointer in einen normalen Funktionspointer konvertieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388500</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 12 Mar 2014 18:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 19:57:04 GMT]]></title><description><![CDATA[<p>Irgendwelche Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388527</guid><dc:creator><![CDATA[Sepultura]]></dc:creator><pubDate>Wed, 12 Mar 2014 19:57:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 19:59:48 GMT]]></title><description><![CDATA[<p>std::function + bind/lambda<br />
template parameter + bind/lambda/functor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388531</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 12 Mar 2014 19:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 20:23:14 GMT]]></title><description><![CDATA[<p>meinst du sowas?<br />
std::function&lt;void(type&lt;T&gt;*)&gt; f = std::bind(&amp;row&lt;T&gt;::trigger_func);</p>
<p><a href="http://de.cppreference.com/w/cpp/utility/functional/function" rel="nofollow">http://de.cppreference.com/w/cpp/utility/functional/function</a><br />
<a href="http://www.cplusplus.com/reference/functional/bind/" rel="nofollow">http://www.cplusplus.com/reference/functional/bind/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388538</guid><dc:creator><![CDATA[Sepultura]]></dc:creator><pubDate>Wed, 12 Mar 2014 20:23:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 20:53:32 GMT]]></title><description><![CDATA[<p>Ja, musst nur noch einen Pointer to row&lt;T&gt; an trigger_func binden, sonst bringt das nichts:</p>
<pre><code>T *obj;
MemberFncPtr fnc = &amp;T::function;
obj-&gt;fnc(...);
// daraus wird analog:
T *obj;
std::function&lt;ReturnType(Args...)&gt; fnc = std::bind(&amp;T::function, obj);
fnc(...);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2388543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388543</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 12 Mar 2014 20:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit meiner Template Klasse on Wed, 12 Mar 2014 21:12:32 GMT]]></title><description><![CDATA[<p>Vielen Dank <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>Es ist aber spät. Ich werde morgen den Code weiter bearbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2388550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2388550</guid><dc:creator><![CDATA[Sepultura]]></dc:creator><pubDate>Wed, 12 Mar 2014 21:12:32 GMT</pubDate></item></channel></rss>