<?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 Vererbung und zirkulierenden Abhängigkeiten]]></title><description><![CDATA[<p>Hi,<br />
ich mache für die Uni gerade ein Projekt. Dazu muss ich 2 einfach verkettete Listen implementieren. Die erste nutzt die Struktur EElement als ihre Elemente und die zweite soll AElement nutzen.</p>
<p>Das hab ich bereits:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;time.h&gt;
// Bearbeitungsstati für die Activities
enum Status {created, working, done};

// Nutzdaten für die EList (Editoren-Liste)
struct Editor
{
    std::string Name;
    int Alter;
	bool	operator==(Editor ed);
	bool    operator!=( Editor ed);
};

// Nutzdaten plus Verwaltungsdaten für EList
struct EElement
{
    Editor  Val;        // Nutzdaten
    EElement *Next;     // Verwaltungsdaten (Zeiger auf naechstes Element)
};

// Editoren Liste
class EList
{
	public:
		EList();
		~EList();

        bool    m_IsEmpty(void);        // prueft ob Liste leer ist
        void    m_Insert(Editor v);     // fuegt Element in Liste ein
        Editor  m_Head(void);           // gibt neuestes Element zurueck
        bool    m_IsIn(Editor v);       // Prueft ob ein Element enthalten ist
        int     m_GetIndex(Editor v);   // Gibt Index einen Elementes zurueck
        Editor  m_GetElement(int pos);  // Gibt Element-Daten anhand ihres Index zurueck
        bool    m_Remove(Editor v);     // Loescht ein Element

	private:
		EElement *m_pFirst;                 // Zeiger zum neuesten Element
};

// **********************************

struct Activity
{
	std::string description;    //Beschreibung
	EList       editors;        //Bearbeiter dieser Activity (List of Editors)
	time_t      dueDate;        //Faelligkeitsdatum
	int         expenditure;    //Arbeitsaufwand (Stunden)
	Status      state;          //Status [created,working,done]
	AList       childs;         //Unteractivities (List of Integer)
};

struct AElement
{
    Activity Val;       // Nutzdaten
    AElement *Next;     // Verwaltungsdaten (Zeiger auf naechstes Element)
};

// Aktivitaeten Liste
class AList
{
	public:
		AList();
		~AList();

        bool        m_IsEmpty(void);        // prueft ob Liste leer ist
        void        m_Insert(Activity v);   // fuegt Element in Liste ein
        Activity    m_Head(void);           // gibt neuestes Element zurueck
        bool        m_IsIn(Editor v);       // Prueft ob ein Element enthalten ist
        int         m_GetIndex(Editor v);   // Gibt Index einen Elementes zurueck
        Activity    m_GetElement(int pos);  // Gibt Element-Daten anhand ihres Index zurueck
        bool        m_Remove(Editor v);     // Loescht ein Element

	private:
		AElement    *m_pFirst;              // Zeiger zum neuesten Element
};
</code></pre>
<p>Das sind nun meine Probleme:</p>
<ul>
<li>EList und AList sind sich ja sehr ähnlich. Wie kann ich sinnvoll diese getrennte Imlementation zusammenfassen?</li>
<li>die Struktur <em>Actitivity</em> besitzt ein Element vom Typ <em>AList[i] für ihre Unteraktivitäten (wodurch eine Baumsturktur entsteht). Aber [i]AList</em> wird ja erst später deklariert. Wie löse ich das Problem?</li>
</ul>
<p>Mfg Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/143440/problem-mit-vererbung-und-zirkulierenden-abhängigkeiten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 05:54:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143440.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Apr 2006 15:03:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Vererbung und zirkulierenden Abhängigkeiten on Sat, 08 Apr 2006 15:03:38 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich mache für die Uni gerade ein Projekt. Dazu muss ich 2 einfach verkettete Listen implementieren. Die erste nutzt die Struktur EElement als ihre Elemente und die zweite soll AElement nutzen.</p>
<p>Das hab ich bereits:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;time.h&gt;
// Bearbeitungsstati für die Activities
enum Status {created, working, done};

// Nutzdaten für die EList (Editoren-Liste)
struct Editor
{
    std::string Name;
    int Alter;
	bool	operator==(Editor ed);
	bool    operator!=( Editor ed);
};

// Nutzdaten plus Verwaltungsdaten für EList
struct EElement
{
    Editor  Val;        // Nutzdaten
    EElement *Next;     // Verwaltungsdaten (Zeiger auf naechstes Element)
};

// Editoren Liste
class EList
{
	public:
		EList();
		~EList();

        bool    m_IsEmpty(void);        // prueft ob Liste leer ist
        void    m_Insert(Editor v);     // fuegt Element in Liste ein
        Editor  m_Head(void);           // gibt neuestes Element zurueck
        bool    m_IsIn(Editor v);       // Prueft ob ein Element enthalten ist
        int     m_GetIndex(Editor v);   // Gibt Index einen Elementes zurueck
        Editor  m_GetElement(int pos);  // Gibt Element-Daten anhand ihres Index zurueck
        bool    m_Remove(Editor v);     // Loescht ein Element

	private:
		EElement *m_pFirst;                 // Zeiger zum neuesten Element
};

// **********************************

struct Activity
{
	std::string description;    //Beschreibung
	EList       editors;        //Bearbeiter dieser Activity (List of Editors)
	time_t      dueDate;        //Faelligkeitsdatum
	int         expenditure;    //Arbeitsaufwand (Stunden)
	Status      state;          //Status [created,working,done]
	AList       childs;         //Unteractivities (List of Integer)
};

struct AElement
{
    Activity Val;       // Nutzdaten
    AElement *Next;     // Verwaltungsdaten (Zeiger auf naechstes Element)
};

// Aktivitaeten Liste
class AList
{
	public:
		AList();
		~AList();

        bool        m_IsEmpty(void);        // prueft ob Liste leer ist
        void        m_Insert(Activity v);   // fuegt Element in Liste ein
        Activity    m_Head(void);           // gibt neuestes Element zurueck
        bool        m_IsIn(Editor v);       // Prueft ob ein Element enthalten ist
        int         m_GetIndex(Editor v);   // Gibt Index einen Elementes zurueck
        Activity    m_GetElement(int pos);  // Gibt Element-Daten anhand ihres Index zurueck
        bool        m_Remove(Editor v);     // Loescht ein Element

	private:
		AElement    *m_pFirst;              // Zeiger zum neuesten Element
};
</code></pre>
<p>Das sind nun meine Probleme:</p>
<ul>
<li>EList und AList sind sich ja sehr ähnlich. Wie kann ich sinnvoll diese getrennte Imlementation zusammenfassen?</li>
<li>die Struktur <em>Actitivity</em> besitzt ein Element vom Typ <em>AList[i] für ihre Unteraktivitäten (wodurch eine Baumsturktur entsteht). Aber [i]AList</em> wird ja erst später deklariert. Wie löse ich das Problem?</li>
</ul>
<p>Mfg Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033294</guid><dc:creator><![CDATA[Michaelvsk]]></dc:creator><pubDate>Sat, 08 Apr 2006 15:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und zirkulierenden Abhängigkeiten on Sat, 08 Apr 2006 15:55:03 GMT]]></title><description><![CDATA[<p>Hi,<br />
Du kannst Templates benutzen, um eine allgemeine verkettete Liste zu erstellen.<br />
z.B.</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class LinkedList
{
    struct Element
    {
        T data;
        Element *pnext;
    };
    Element *pfirst;
    public:
    //Die Element Funktionen
    void insert(const T &amp;newelement);
    //usw
};

template &lt;class T&gt;
void LinkedList&lt;T&gt;::insert(const T &amp;newelement)
{
  //...
}

class Activity
{
    LinkedList&lt;Activity&gt; list;
};

class Editor
{
};

//Dann kannst du auch sowas machen
typedef LinkedList&lt;Activity&gt; AList;
typedef LinkedList&lt;Editor&gt; EList;

int main()
{
    AList activitylist;
    EList editorlist;
}
</code></pre>
<p>Tschau,<br />
Cappo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033323</guid><dc:creator><![CDATA[Cappo]]></dc:creator><pubDate>Sat, 08 Apr 2006 15:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und zirkulierenden Abhängigkeiten on Sat, 08 Apr 2006 18:57:41 GMT]]></title><description><![CDATA[<p>Ich glaub ich hab soweit alles hinbekommen aber in meiner main.cpp meckert er unverständlichers Weise noch rum:</p>
<blockquote>
<p>undefined reference to `TLinkedList&lt;CEditor&gt;::TLinkedList&gt;'</p>
</blockquote>
<p>Und das für jede Funktion die ich in der main.cpp aufrufe.</p>
<p>Allerdings hab ich die meine list.h eingebunden und in list.h und list.cpp ist alles soweit richtig. Dort meckert er auch nicht mehr.</p>
<p>Kapier das nicht ganz <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=":/"
      alt="😕"
    /></p>
<p>Hier hab ich mal den Source abgelegt - ihn zu posten wäre zu unübersichtlich geworden.</p>
<p><a href="http://www.michaelvs.de/list.h.txt" rel="nofollow">List.h</a><br />
<a href="http://www.michaelvs.de/list.cpp.txt" rel="nofollow">List.cpp</a><br />
<a href="http://www.michaelvs.de/main.cpp.txt" rel="nofollow">Main.cpp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033431</guid><dc:creator><![CDATA[Michaelvsk]]></dc:creator><pubDate>Sat, 08 Apr 2006 18:57:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und zirkulierenden Abhängigkeiten on Sun, 09 Apr 2006 11:01:58 GMT]]></title><description><![CDATA[<p>Also wenn ich alles aus der List.h und List.cpp in die main.cpp kopiere ist der fehler verschwunden. Da frag ich ich aber wieso - eigentlich hab ich die dateien doch richtig eingebunden <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=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033676</guid><dc:creator><![CDATA[Michaelvsk]]></dc:creator><pubDate>Sun, 09 Apr 2006 11:01:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und zirkulierenden Abhängigkeiten on Sun, 09 Apr 2006 11:09:09 GMT]]></title><description><![CDATA[<p>Hi,<br />
wenn sonst keiner antwortet mach ich es halt <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="😉"
    /> .<br />
Die Templatedefinitionen müssen mit in den Header.<br />
Es gibt zwar das Schlüsselwort export mit dem es möglich sein sollte Templates in .h und .cpp aufzuteilen,allerdings wird dieses von keinem mir bekannten Compiler unterstützt.<br />
Und selbst wenn deiner das unterstützen sollte fährst du mit dem altbekannten Schema trotzdem besser weil dein Code dadurch portabler bleibt.<br />
Durchsuch mal das Forum,da wirst du schätzungsweise 1 Milliarde Posts zu dem Thema finden.</p>
<p>Gruss Spacelord</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033678</guid><dc:creator><![CDATA[Spacelord]]></dc:creator><pubDate>Sun, 09 Apr 2006 11:09:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und zirkulierenden Abhängigkeiten on Sun, 09 Apr 2006 12:10:58 GMT]]></title><description><![CDATA[<p>Und wenn's sonst keiner sagt, dann halt ich: Die gezeigt Lösung paßt nicht zur Aufgabenstellung. Die Liste soll die angegebenen Klassen als Nodes verwenden und nicht die nochmal in Nodes verpacken. Wozu wären sonst die next* gut?</p>
<p>Kann man natürlich trotzdem über ein template machen, allerdings müßte dann der NodeTyp der template-Parameter sein, nicht der Datentyp. Ist halt eine intrusive List.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1033718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033718</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 09 Apr 2006 12:10:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und zirkulierenden Abhängigkeiten on Sun, 09 Apr 2006 15:20:59 GMT]]></title><description><![CDATA[<p>Die Aufgabenstellung ist eine ToDo Liste zu implementieren - ich hab für mein hier beschriebenes Problem nur das relevante zusammen gefasst. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1033876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1033876</guid><dc:creator><![CDATA[Michaelvsk]]></dc:creator><pubDate>Sun, 09 Apr 2006 15:20:59 GMT</pubDate></item></channel></rss>