<?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 Template-Klasse]]></title><description><![CDATA[<p>Hallo,<br />
beschäftige mich gerade mit Templates und habe ein Problem:<br />
ich habe eine Klasse für eine Tabelle erstellt. die Funktionen zur Verwaltung von Daten zur Verfügung stellt.<br />
Zusätzlich habe ich eine Klasse Mitarbeiter erstellt, die in die Tabelle eingetragen werden soll.<br />
table.h</p>
<pre><code class="language-cpp">#ifndef _TABLE_H
#define _TABLE_H

template &lt;class TR, class TK&gt;
class Table
    // Tabelle für Records vom beliebigen Typ TR
    // und Schlüssel vom beliebigen Typ TK
{
public:
    Table(unsigned m);
    // kreiert leere Tabelle für maximal m Records
    ~Table();
    // gibt den von der Tabelle belegten Speicher wieder frei
    void Reorg(unsigned m);
    // Tabelle um m zusätzliche Records erweitern
    bool Append(TR r);
    // fügt neuen Record am Ende ein
    bool IsEmpty();
    // true wenn Tabelle leer, sonst false
    bool IsFull();
    // true wenn Tabelle voll, sonst false
    unsigned Length();
    // liefert aktuelle Länge der Tabelle
    bool First();
    // erster Record wird zum aktuellen Record
    bool Next();
    // der dem aktuellen Record folgende Record
    // wird zum neuen aktuellen Record
    bool Previous();
    // der dem aktuellen Record vorausgehende Record
    // wird zum aktuellen Record
    bool Find(TK x);
    // Record mit Schlüssel x wird zum aktuellen Record
    bool FindFirst(TK x);
    // erster Record mit Schlüssel größer oder
    // gleich x wird zum aktuellen Record
    bool Insert(TR &amp;r);
    // fügt neuen Record vor dem aktuellen Record ein
    bool Delete();
    // löscht aktuellen Record
    bool GetNode(TR &amp;r);
    // liefert aktuellen Record in der Recordvariablen r
    bool SetNode(TR &amp;r);
    // ersetzt aktuellen Record durch Recordvariable r
    bool SeqSearch(TK x);
    // Sequenzielles suchen
    bool BinSearch(TK x);
    // Binäres suchen
    void InsertSort();
    // Sortieren durch einfügen
    void SelectionSort();
    // Sortieren durch Auswählen
    void ExchangeSort();
    // Direktes sortieren durch austauschen
    void IndirectSort(TR *a, int *s, int n);
    // Indirektes Sortieren
    int Partition(int l, int r);
    void QuickSortTable(int l, int r);
    void Merge(int l, int m, int r);
    void MergeSort(int l, int r);
private:
    unsigned max;
    // maximale Länge der Tabelle
    unsigned n;
    // aktuelle Länge der Tabelle
    int iterator, *s;
    // Index-Iterator für den aktuellen Record
    TR *a;
    // Zeiger auf Tabelle
    void Mean(int l, int r);
    void Median(int l, int r);
    void Swap(TR &amp;a, TR &amp;b);
    // vertauschen der beiden Records a und b
};
</code></pre>
<p>Mitarbeiter.h</p>
<pre><code class="language-cpp">#include &quot;table.h&quot;

class Mitarbeiter
{
public:
	void Generate(unsigned k, char *str, unsigned a, float g);
	bool operator != (Mitarbeiter &amp;r);
	unsigned GetKey() { return key; }
	friend ostream &amp; operator &lt;&lt; (ostream &amp; os, Mitarbeiter &amp;m);
private:
	char Name[30];
	unsigned key;
	unsigned Alter;
	float Gehalt;
};

void Mitarbeiter::Generate(unsigned k, char *str, unsigned a, float g)
{
	key=k;
	Alter=a;
	Gehalt=g;
	if (strlen(str)&lt;30)
		strcpy(Name,str);
	else
	{
		for (int i=0; i&lt;29; i++)  Name[i]=str[i];
		Name[29]='\0';
	}
}

bool Mitarbeiter::operator != (Mitarbeiter &amp;m)
{
	if (key!=m.key)
        return true;
	if (strcmp(this-&gt;Name,m.Name))
        return true;
	if (Alter!=m.Alter)
        return true;
	if (Gehalt!=m.Gehalt)
        return true;
	else
        return false;
}

ostream &amp; operator &lt;&lt; (ostream &amp; os, Mitarbeiter &amp;m)
{
	os &lt;&lt; endl &lt;&lt; m.key &lt;&lt; &quot;   &quot; &lt;&lt; m.Name &lt;&lt;
                &quot;   Alter:    &quot; &lt;&lt; 	m.Alter &lt;&lt;
                &quot;   Gehalt:  &quot; &lt;&lt; m.Gehalt;
	return os;
}
</code></pre>
<p>Wnn ich nun versuche in der main.cpp mit</p>
<pre><code>Table&lt;Mitarbeiter, unsigned&gt; m(50);
</code></pre>
<p>mit der Klasse zu arbeiten bekomme ich folgende Fehlermeldung:</p>
<p>&quot;[Linker Fehler]Unresolved external'Table&lt;Mitarbeiter, unsigned int&gt;()'referenced from ...&quot;</p>
<p>Kann mir jemand einen Tipp geben, was ich hier falsch mache?<br />
Beschäftige mich erst die letzten Tage mit Templates.<br />
Vielen Dank im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/139067/problem-mit-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 09:36:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139067.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Mar 2006 11:57:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Template-Klasse on Fri, 03 Mar 2006 11:57:56 GMT]]></title><description><![CDATA[<p>Hallo,<br />
beschäftige mich gerade mit Templates und habe ein Problem:<br />
ich habe eine Klasse für eine Tabelle erstellt. die Funktionen zur Verwaltung von Daten zur Verfügung stellt.<br />
Zusätzlich habe ich eine Klasse Mitarbeiter erstellt, die in die Tabelle eingetragen werden soll.<br />
table.h</p>
<pre><code class="language-cpp">#ifndef _TABLE_H
#define _TABLE_H

template &lt;class TR, class TK&gt;
class Table
    // Tabelle für Records vom beliebigen Typ TR
    // und Schlüssel vom beliebigen Typ TK
{
public:
    Table(unsigned m);
    // kreiert leere Tabelle für maximal m Records
    ~Table();
    // gibt den von der Tabelle belegten Speicher wieder frei
    void Reorg(unsigned m);
    // Tabelle um m zusätzliche Records erweitern
    bool Append(TR r);
    // fügt neuen Record am Ende ein
    bool IsEmpty();
    // true wenn Tabelle leer, sonst false
    bool IsFull();
    // true wenn Tabelle voll, sonst false
    unsigned Length();
    // liefert aktuelle Länge der Tabelle
    bool First();
    // erster Record wird zum aktuellen Record
    bool Next();
    // der dem aktuellen Record folgende Record
    // wird zum neuen aktuellen Record
    bool Previous();
    // der dem aktuellen Record vorausgehende Record
    // wird zum aktuellen Record
    bool Find(TK x);
    // Record mit Schlüssel x wird zum aktuellen Record
    bool FindFirst(TK x);
    // erster Record mit Schlüssel größer oder
    // gleich x wird zum aktuellen Record
    bool Insert(TR &amp;r);
    // fügt neuen Record vor dem aktuellen Record ein
    bool Delete();
    // löscht aktuellen Record
    bool GetNode(TR &amp;r);
    // liefert aktuellen Record in der Recordvariablen r
    bool SetNode(TR &amp;r);
    // ersetzt aktuellen Record durch Recordvariable r
    bool SeqSearch(TK x);
    // Sequenzielles suchen
    bool BinSearch(TK x);
    // Binäres suchen
    void InsertSort();
    // Sortieren durch einfügen
    void SelectionSort();
    // Sortieren durch Auswählen
    void ExchangeSort();
    // Direktes sortieren durch austauschen
    void IndirectSort(TR *a, int *s, int n);
    // Indirektes Sortieren
    int Partition(int l, int r);
    void QuickSortTable(int l, int r);
    void Merge(int l, int m, int r);
    void MergeSort(int l, int r);
private:
    unsigned max;
    // maximale Länge der Tabelle
    unsigned n;
    // aktuelle Länge der Tabelle
    int iterator, *s;
    // Index-Iterator für den aktuellen Record
    TR *a;
    // Zeiger auf Tabelle
    void Mean(int l, int r);
    void Median(int l, int r);
    void Swap(TR &amp;a, TR &amp;b);
    // vertauschen der beiden Records a und b
};
</code></pre>
<p>Mitarbeiter.h</p>
<pre><code class="language-cpp">#include &quot;table.h&quot;

class Mitarbeiter
{
public:
	void Generate(unsigned k, char *str, unsigned a, float g);
	bool operator != (Mitarbeiter &amp;r);
	unsigned GetKey() { return key; }
	friend ostream &amp; operator &lt;&lt; (ostream &amp; os, Mitarbeiter &amp;m);
private:
	char Name[30];
	unsigned key;
	unsigned Alter;
	float Gehalt;
};

void Mitarbeiter::Generate(unsigned k, char *str, unsigned a, float g)
{
	key=k;
	Alter=a;
	Gehalt=g;
	if (strlen(str)&lt;30)
		strcpy(Name,str);
	else
	{
		for (int i=0; i&lt;29; i++)  Name[i]=str[i];
		Name[29]='\0';
	}
}

bool Mitarbeiter::operator != (Mitarbeiter &amp;m)
{
	if (key!=m.key)
        return true;
	if (strcmp(this-&gt;Name,m.Name))
        return true;
	if (Alter!=m.Alter)
        return true;
	if (Gehalt!=m.Gehalt)
        return true;
	else
        return false;
}

ostream &amp; operator &lt;&lt; (ostream &amp; os, Mitarbeiter &amp;m)
{
	os &lt;&lt; endl &lt;&lt; m.key &lt;&lt; &quot;   &quot; &lt;&lt; m.Name &lt;&lt;
                &quot;   Alter:    &quot; &lt;&lt; 	m.Alter &lt;&lt;
                &quot;   Gehalt:  &quot; &lt;&lt; m.Gehalt;
	return os;
}
</code></pre>
<p>Wnn ich nun versuche in der main.cpp mit</p>
<pre><code>Table&lt;Mitarbeiter, unsigned&gt; m(50);
</code></pre>
<p>mit der Klasse zu arbeiten bekomme ich folgende Fehlermeldung:</p>
<p>&quot;[Linker Fehler]Unresolved external'Table&lt;Mitarbeiter, unsigned int&gt;()'referenced from ...&quot;</p>
<p>Kann mir jemand einen Tipp geben, was ich hier falsch mache?<br />
Beschäftige mich erst die letzten Tage mit Templates.<br />
Vielen Dank im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1007536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1007536</guid><dc:creator><![CDATA[Sebi-Fr]]></dc:creator><pubDate>Fri, 03 Mar 2006 11:57:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Template-Klasse on Fri, 03 Mar 2006 12:01:50 GMT]]></title><description><![CDATA[<p>Wenn's noch nicht exisistiert, sollte das Thema auf jeden Fall in die FAQ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>@Sebi-Fr: Schau dir mal meine Erklärungen <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1006431.html#1006431" rel="nofollow">hier</a> an - die Symptome waren zwar anders, aber das Kernproblem ist identisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1007538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1007538</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Mar 2006 12:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Template-Klasse on Fri, 03 Mar 2006 12:14:25 GMT]]></title><description><![CDATA[<p>Probleme gibt es mit der Aufteilung in die verschiedenen Dateien?<br />
Habe alles in eine main-Datei kopiert -&gt; gleiche Meldung<br />
Habe eine Header und eine C++-Datei -&gt; gleiche Meldung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1007548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1007548</guid><dc:creator><![CDATA[Sebi-Fr]]></dc:creator><pubDate>Fri, 03 Mar 2006 12:14:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Template-Klasse on Fri, 03 Mar 2006 12:22:37 GMT]]></title><description><![CDATA[<p>Hi, der trick ist der das du bei Templates nicht nur die Deklaration sondern auch die Definition der Klasse mit in die Header datei schreiben musst damit das ganze &quot;gesehen&quot; wird.</p>
<p>also den inhalt von table.cpp in die table.h mit reinschreiben oder die table.cpp mit #include unter die deklaration der classe in die table.h einfuegen</p>
<p>gruessle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1007555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1007555</guid><dc:creator><![CDATA[TDO]]></dc:creator><pubDate>Fri, 03 Mar 2006 12:22:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Template-Klasse on Fri, 03 Mar 2006 12:23:01 GMT]]></title><description><![CDATA[<p>Und wo hast du die Definitionen der Table-Methoden untergebracht? Die muß der Compiler dort sehen, wo er eine Table&lt;...&gt; anlegen und verwenden soll (also am besten inline direkt in den Header packen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1007559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1007559</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Mar 2006 12:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Template-Klasse on Fri, 03 Mar 2006 13:18:25 GMT]]></title><description><![CDATA[<p>Danke für eure Infos. Versuche mal das ganze entsprechend anzupassen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1007633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1007633</guid><dc:creator><![CDATA[Sebi-Fr]]></dc:creator><pubDate>Fri, 03 Mar 2006 13:18:25 GMT</pubDate></item></channel></rss>